Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Что означает знак & ?

Сообщения:  [1-10]    [11-20]   [21-30]   [31-40]  [41-43] 

 
 автор: isset   (22.11.2005 в 16:13)   письмо автору
 
   для: cheops   (22.11.2005 в 13:49)
 

может приводить при неправильном использовании..

   
 
 автор: cheops   (22.11.2005 в 13:49)   письмо автору
 
   для: human   (22.11.2005 в 09:07)
 

Да нет я ничего против этого не имею, и тем более против вас - в книге действительно так всё и написано и не верить ей сложно, авторы наверняка знали о чём пишут. При организации счётчика памяти (особенно через ООП) - вполне можно ожидать падение производительности при использовании &. Меня возмущает, что разработчики не позаботились о том, чтобы & работал не медленнее передачи "по значению" - автоматическую передачу можно только приветствовать - сам я почти никогда не использую &, так как знаю об этой особенности, но меня неприятно удивило, то что использование & может приводить к более низкой производительности.

   
 
 автор: human   (22.11.2005 в 09:07)   письмо автору
 
   для: human   (21.11.2005 в 19:35)
 

Еще пару слов про ссылки. Хотите верьте - хотите нет, но...

В связи с распространившимся заболеванием под названием синдром WTMA
(Way Too Many Ampersand - "слишком много амперсандов" ) разработчиками PHP5
для облегчения жизни ООП-программистам были сделаны существенные изменения
в Zend 2 в отношении объектов. В результате - теперь можно почти совсем
забыть про этот значок & (амперсанд). Теперь за вас все сделает Zend.

Проверить это просто (если установлен PHP5): взять любой работающий скрипт,
в котором используются объекты, и тупо удалить все значки &.
Существует достаточно высокая вероятность, что этот скрипт будет продолжать
работать правильно.

Ох, боюсь только, что сейчас Уважаемый Cheops назовет это большой глупостью...:-)

   
 
 автор: human   (21.11.2005 в 19:35)   письмо автору
 
   для: Shorr Kan   (15.11.2005 в 22:08)
 

Вот по этой ссылке я выложил ZIP-архив, в котором содержатся две отсканированных странички по обсуждаемой проблеме.
http://valiv.pochta.ru/downl.htm

Для тех, кто интересуется работой PHP изнутри, можно порекомендовать почитать в PHP-мануале раздел
VI. Zend API, посвященный ядру PHP.

Ниже я привожу начало этого раздела, взятое из chm-файла перевода этого руководства.
--------------------------------------------------------------------------------------
Глава 25. Обзор

Что такое Zend и что такое PHP?
"Расширить PHP" легче сказать, чем сделать. PHP вырос в полноценную утилиту, состоящую из нескольких мегабайт исходного кода. При структурировании этой главы мы остановились на реализации подхода "обучения через выполнение". Это не самый научный и профессиональный подход, но этот метод более привлекателен и даёт наилучший конечный результат.
В последующих разделах вы быстро научитесь, как сделать так, чтобы самые основные расширения работали почти постоянно.
Затем вы узнаете о продвинутой API-функциональности Zend. Альтернативно можно было бы попытаться объединить функциональность, дизайн, подсказки, трюки, и т.п. в единое целое, давая таким образом полный обзор общей картины, прежде чем делать что-либо практически. Хотя это "лучший" метод, поскольку никаких неточностей не будет, он требует больших затрат времени и энергии, почему мы и решили использовать прямой подход.

Заметьте, что, хотя в этой главе сделана попытка дать как можно больше информации о внутренней работе PHP, невозможно дать абсолютно полный справочник расширения PHP, который обеспечивал бы 100% работоспособность во всех случаях. Можно разобраться в PHP, при таком сложном и объёмном пакете, только в том случае, если вы ознакомитесь с ним практически, поэтому мы советуем вам работать с исходным материалом.

Что такое Zend и что такое PHP?
Имя Zend это имя машины языка, ядра PHP. Термин PHP это вся система целиком. Это не так уж сложно понять (см. Рисунок 9.1). Чтобы реализовать интерпретатор Web-скриптов, необходимы три части:

Интерпретатор анализирует входной код, транслирует и выполняет его.
Функциональный модуль реализует функциональность языка (его функции и т.д.).
Интерфейс взаимодействует с Web-сервером и т.д.

Zend полностью выполняет работу части 1 и частично - части 2; PHP выполняет работу частей 2 и 3. Вместе они образуют законченный пакет PHP. Zend формирует только ядро языка, реализуя PHP в самой основе с помощью некоторых предопределённых функций. PHP содержит все модули, которые реально создают свойства языка.
-----------------------------------------------------------------------------------------------------------

   
 
 автор: Shorr Kan   (20.11.2005 в 20:39)   письмо автору
 
   для: isset   (20.11.2005 в 16:06)
 

Оказывается, вопросы я задавать умею...

   
 
 автор: isset   (20.11.2005 в 19:51)   письмо автору
 
   для: human   (20.11.2005 в 19:10)
 

Следить глупо, т.к. если понадобилось $mas2 = $mas1 то значит кто-то из них будет меняться и поэтому нужно создать именно копию, а не ссылку

   
 
 автор: human   (20.11.2005 в 19:10)   письмо автору
 
   для: isset   (20.11.2005 в 14:52)
 

>

>при работе с массивами PHP автоматически создает ссылки в
>операциях присваивания или при передаче аргументов и в таких
>случаях копирования массивов не происходит (при условии, что
>в исходный массив не было записи).
>

>Докажите это примером кода.

Показать это на примере невозможно, т.к. описанный механизм действует не на уровне
кодов в тексте PHP-программы, а на уровне Zend-машины (процессора PHP).
Поэтому приходится верить на слово разработчикам PHP-процессора.

>PHP не может создавать сам ссылки, иначе если бы мы обнулили
>$mas2, то обнулился бы и $mas1

В том то и весь фокус, что не обнулится !
Я уже пытался дважды про это рассказать, но как-то бестолково.
PHP следит за состоянием всех внутренних ссылок и если обнаруживает, что происходит
запись в ссылаемую переменную (а ее обнуление - частный случай записи), то сразу же принимает меры, а именно: создает копию этой переменной.

Почему-то складывается впечатление, что все это мои измышления...:-), поэтому я дальше на эту тему продолжать не буду. Хотите верьте, хотите - нет...:-)
Мне все описанные механизмы показались вполне оптимальными и разумными.

Для тех, кто захочет в этой проблеме разобраться самостоятельно (и не имеет доступа к литературе) завтра отсканирую пару страниц и где-нибудь выложу.

   
 
 автор: isset   (20.11.2005 в 16:06)   письмо автору
 
   для: Artem S.   (20.11.2005 в 15:39)
 

Имхо со вторым кодом неточное время.

   
 
 автор: Artem S.   (20.11.2005 в 15:39)   письмо автору
 
   для: Artem S.   (20.11.2005 в 15:23)
 

Хм...

<?
function test_ref(&$arr) {
   
sizeof($arr);
}
function 
test_val($arr) {
   
sizeof($arr);
}
$ar  range(0,100000);
test_ref($ar);
test_val($ar);
?>


Profile:
test.php::main()-----1,8 sec
test_ref()--------------4,9 sec
test_val()--------------0,040 ms


<?
function test_ref(&$arr) {
   
sizeof($arr);
}
function 
test_val($arr) {
   return 
sizeof($arr);
}
$ar1  range(0,80000);
$ar2  range(0,80000);
test_ref($ar1);
echo 
test_val($ar2);
?>


Profile:
test.php::main()-----1,4 sec
test_ref()--------------902,7 ms
test_val()--------------0,400 ms

   
 
 автор: Artem S.   (20.11.2005 в 15:23)   письмо автору
 
   для: isset   (20.11.2005 в 14:56)
 

Не имеет смысл.
1. В функции используется sizeof, в который массив передается по значению и смысла в & уже нет.
2. Скрипт выполняется достаточно быстро - погрешность большая.

   

Сообщения:  [1-10]    [11-20]   [21-30]   [31-40]  [41-43] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования