PHP __ autoload ()
( документация ) мне очень интересен. Вот как это работает:
new Toast_Mitten ()
(сноска 1 ) __ autoload ()
». Он запускает его. Toast_Mitten
с classes / toast_mitten.php
и сказали ей, чтобы она потребовала этот файл. Так и есть. Преимущество памяти: вы загружаете только те классы, которые вам нужны. Преимущество краткости: вы можете перестать включать столько файлов повсюду и просто включить свой автозагрузчик.
Все становится особенно интересно, если
1) ваш __ autoload ()
имеет автоматический способ определения пути и имени файла из название класса. Например, возможно, все ваши классы находятся в classes /
, а Toast_Mitten
будут в classes / toast_mitten.php
. Или, может быть, вы назовете классы вроде Animal_Mammal_Weasel
, которые будут в classes / animal / mammal / animal_mammal_weasel.php
.
2) Вы используете фабричный метод для получения экземпляров своего класса .
$Mitten = Mitten::factory('toast');
Метод Mitten :: factory может сказать себе: «Посмотрим, есть ли у меня подкласс с именем Toast_Mitten ()
? Если да, я верну его; если нет, я» Я просто верну свой родовой экземпляр - стандартную варежку. О, посмотри! __ autoload ()
сообщает мне, что - это специальный класс для тостов. Хорошо, вот вам пример! "
Таким образом, вы можете начать использовать обычную варежку на протяжении всего кода, а когда придет день, когда вам понадобится особое поведение для тоста, вы просто создадите этот класс и бац! - ваш код использует его.
У меня двоякий вопрос:
Когда еще рекомендуется такая практика?
В каких случаях можно использовать константную ссылку и каковы преимущества перед простой передачей ее, например, через указатель?
А как насчет этого void MyObject :: Somefunc ( const std :: string & mystring)
Какой смысл иметь константную строку, если строка на самом деле уже является неизменяемым объектом?