Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: include, require \+once

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
UNTRUSTED
Отправлено: 19 Марта, 2012 - 16:45:31
Post Id


Частый гость


Покинул форум
Сообщений всего: 255
Дата рег-ции: Март 2012  


Помог: 2 раз(а)




Вот еще один глупый вопрос, на который нет ответа!
Вот это понятно с тем, что incude, это просто который подключается, а require - необходимый, соотв. выдаст разного рода ошибки при их отсутствии..
once тоже понятно, что подключить один раз, но?? Что значит один раз? Если я например делаю Ctrl+R , он же все равно и тот, и тот по новой подключит, не могу ваще врубитьсяУлыбка
И вот в чем еще вопрос, когда какие лучше использовать? Я всегда require_once использую, так как считаю, что если какой-то любой файл не подключиться - будет ж...
 
 Top
EuGen Администратор
Отправлено: 19 Марта, 2012 - 16:53:47
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




UNTRUSTED
Это значит, что он подключится один раз, даже если его включение будет встречено несколько раз. Сделано это, чтобы не возникало фатальных ошибок при сложной логике включения.
Например,
PHP:
скопировать код в буфер обмена
  1. require('test.php');
  2. //code
  3. require('test.php');

- вызовет ошибку, тогда как

PHP:
скопировать код в буфер обмена
  1. require_once('test.php');
  2. //code
  3. require_once('test.php');

- нет, второй вызов просто проигнорируется.
И не стоит путать, обновление через браузер тут ни при чем, т.к. PHP исполняется на сервере и каждый раз скрипт начинает свое исполнение заново, проходя все require или include


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
UNTRUSTED
Отправлено: 19 Марта, 2012 - 17:00:37
Post Id


Частый гость


Покинул форум
Сообщений всего: 255
Дата рег-ции: Март 2012  


Помог: 2 раз(а)




тоесть once сделано для того, чтобы если случайно два раза подключишь - игнорировало это?? Ха-ха Ха-ха
А что быстрей?
т.е. если я не закосячу, то можно везде писать просто require()?
 
 Top
Opposite
Отправлено: 19 Марта, 2012 - 17:20:39
Post Id



Гость


Покинул форум
Сообщений всего: 109
Дата рег-ции: Март 2012  


Помог: 4 раз(а)




да) Так Радость
 
 Top
Okula
Отправлено: 19 Марта, 2012 - 17:20:59
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




Лучше не косячить. Отличие include от require вот в чём: в случаи отсутствия подключаемого файла include выдаст ошибку типа E_WARNING и скрипт продолжит выполнение, а require - Fatal Error и скрипт завершится в аварийном режиме.
 
 Top
OrmaJever Модератор
Отправлено: 19 Марта, 2012 - 17:21:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




UNTRUSTED пишет:
тоесть once сделано для того, чтобы если случайно два раза подключишь - игнорировало это??

Это не смешно когда инклудов целая иерархия, один файл инклудится во второй, второй в трейтий и т.д.
Быстрее работает простой инклуд т.е. once ещё проверяет включен ли файл.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Opposite
Отправлено: 19 Марта, 2012 - 17:24:35
Post Id



Гость


Покинул форум
Сообщений всего: 109
Дата рег-ции: Март 2012  


Помог: 4 раз(а)




Насчет времени:
PHP:
скопировать код в буфер обмена
  1.  
  2.     $t = microtime(true);
  3.     require $file; // include $file;
  4.     echo microtime(true) - $t;
  5.  


Запусти и сравни
 
 Top
UNTRUSTED
Отправлено: 19 Марта, 2012 - 17:41:05
Post Id


Частый гость


Покинул форум
Сообщений всего: 255
Дата рег-ции: Март 2012  


Помог: 2 раз(а)




а в этом подключаемом фале сделать что-то типа такого?
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. for(i=0;i<10000;i++){
  3. echo'$i';
  4. }
  5. ?>

(Добавление)
Протестировал раз 10 каждый, в среднем одинакого, хотя первый раз простой require занял чуть больше времени на 0.002 секУлыбка, но в остальные разы реабилитировалсяУлыбка
(Добавление)
тоесть лучше так и оставить и писать (уже по привычке) везде require_once???
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB