[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Использование магической функции __autoload()
romantik2011
Прочитал здесь: http://phpclub.ru/faq/PHP5/Autoload
что в PHP5 перед тем как создать объект несуществующего класса, идёт попытка вызова __autoload(), который должен попытаться подключить такой класс, которого на самом деле нету.

Вот в одной директории, у меня лежит 3 файла:
index.php

<?php
function
__autoload($name){
include $name.".class.php";
echo "Ищем класс $name";
}

$ob1 = new A();
$ob1->son();
$ob2 = new B();
$ob2->fanta();

?>

A.class.php

<?php

class
A{
public function son(){
echo "<br />Вызвана функция <u>Сон</u>, класса <u>А</u>";
}
}


?>


B.class.php

<?php

class
A{
public function fanta(){
echo "<br />Вызвана функция <u>Fanta</u>, класса <u>B</u>";
}
}


?>


Класс А находит, а класс В нет, как быть?



Спустя 2 минуты, 36 секунд (29.07.2011 - 17:43) Winston написал(а):
Цитата (romantik2011 @ 29.07.2011 - 17:41)
B.class.php

<?php

class A{

Что-то не похоже, что это класс B smile.gif

Спустя 4 минуты, 24 секунды (29.07.2011 - 17:48) romantik2011 написал(а):
Точно, спасибо. Скажите, вот всегда надо писать? ".class.php";
я имею ввиду ключевое слово class, а файлы обязательно называть?
<Название>+<.class>+<.php>?

Спустя 2 минуты, 15 секунд (29.07.2011 - 17:50) Winston написал(а):
Цитата (romantik2011 @ 29.07.2011 - 17:48)
вот всегда надо писать? ".class.php";

Можно вообще этого не писать, а просто A.php или B.php
Но согласись, что A.class.php более понятно? smile.gif

Спустя 2 минуты, 43 секунды (29.07.2011 - 17:53) romantik2011 написал(а):
Вот так не хочет искать include $name."*.php" и так тоже не ищет include $name."A.class.php";
и ещё момент, зачем конкатенировать, вот с этим $name ?

Спустя 23 минуты, 35 секунд (29.07.2011 - 18:16) romantik2011 написал(а):
Всё понял ,спасибо. Скажите, а если например у меня 500 классов, все называются так: название.class.php
не будет ли это вредно столько подключить? Может на что-то влияет или лишняя память расходуется?

Спустя 4 минуты, 45 секунд (29.07.2011 - 18:21) jetistyum написал(а):
будут подключаться только те, которые ты используешь. Действительно ли ты будешь одновременно использовать объекты 500 классов?

Спустя 6 минут, 3 секунды (29.07.2011 - 18:27) romantik2011 написал(а):
Значит если объект создам только тогда класс подключится из множества классов, а если объект не создам, тогда и файл не подключится через __autoload()?

Спустя 1 минута, 42 секунды (29.07.2011 - 18:29) Winston написал(а):
romantik2011
Верно.

Спустя 4 часа, 32 минуты, 44 секунды (29.07.2011 - 23:01) Arni написал(а):
Но следует помнить, что при таком подключении php затратит больше ресурсов, времени, и памяти на подключение. Поэтому злоупотреблять этим не стоит. Но и мучить козу тоже не надо. Реально удобная штука.

Спустя 10 дней, 12 часов, 56 минут, 47 секунд (10.08.2011 - 11:58) mor22 написал(а):
Привет, я для autoload написал свою функцию, которая инклюдит все .PHP файлы в папке и что самое приятное в подпапках тоже.


function Autoload(){
$CoreDir = new RecursiveDirectoryIterator('dir_location');
$CoreDirIterator = new RecursiveIteratorIterator($CoreDir);
$CoreFileList = new RegexIterator($CoreDirIterator, '/^.+\.php$/i', RecursiveRegexIterator::GET_MATCH);
foreach ($CoreFileList as $file => $v){
require_once ($file);
}
}


Спустя 31 минута, 2 секунды (10.08.2011 - 12:29) neadekvat написал(а):
mor22, а нахрена?
Вся прелесть autoload в том, чтобы подключать только необходимые классы.

Цитата (romantik2011 @ 29.07.2011 - 18:48)
Точно, спасибо. Скажите, вот всегда надо писать? ".class.php";

А у меня классы лежат в каталоге classes и поэтому я не заморачиваюсь с доп. наименованиями. Там просто все классы.

Спустя 1 час, 22 минуты, 33 секунды (10.08.2011 - 13:52) mor22 написал(а):
neadekvat
Да, здесь ты прав. Я только потом, когда перечитал - понял.

Видимо это была альтернатива функции __autoload() если уже совсем все плохо.

Спустя 12 дней, 2 часа, 26 минут, 42 секунды (22.08.2011 - 16:18) xvii написал(а):
хорошая функция, не знал про такую. теперь у себя использовать буду - спасибо
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.