что в 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

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

Спустя 2 минуты, 43 секунды (29.07.2011 - 17:53) romantik2011 написал(а):
Вот так не хочет искать include $name."*.php" и так тоже не ищет include $name."A.class.php";
и ещё момент, зачем конкатенировать, вот с этим $name ?
и ещё момент, зачем конкатенировать, вот с этим $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 в том, чтобы подключать только необходимые классы.
Вся прелесть autoload в том, чтобы подключать только необходимые классы.
Цитата (romantik2011 @ 29.07.2011 - 18:48) |
Точно, спасибо. Скажите, вот всегда надо писать? ".class.php"; |
А у меня классы лежат в каталоге classes и поэтому я не заморачиваюсь с доп. наименованиями. Там просто все классы.
Спустя 1 час, 22 минуты, 33 секунды (10.08.2011 - 13:52) mor22 написал(а):
neadekvat
Да, здесь ты прав. Я только потом, когда перечитал - понял.
Видимо это была альтернатива функции __autoload() если уже совсем все плохо.
Да, здесь ты прав. Я только потом, когда перечитал - понял.
Видимо это была альтернатива функции __autoload() если уже совсем все плохо.
Спустя 12 дней, 2 часа, 26 минут, 42 секунды (22.08.2011 - 16:18) xvii написал(а):
хорошая функция, не знал про такую. теперь у себя использовать буду - спасибо