цель: я хочу иметь возможность расширять любой класс php, используя оператор extends и оператор NO require, например:
<?php
class some_child extends some_parent{
}
?>
НО в настоящее время я должен сделать это:
<?php
require_once("some_parent.php");
class some_child extends some_parent{
}
?>
Просто отметить:
ВОПРОС
как мне этого достичь, то есть расширить родительский класс, не требуя этого?
заранее извиняюсь, если это НЕ конструктивно, я никогда не знаю правил здесь. ТИА
РЕДАКТИРОВАТЬ
просто чтобы быть яснее, я ищу решение «за кулисами», надеясь, что я мог бы установить что-то в htaccess или php.ini, чтобы не только включать необходимые файлы, но и загружать их, мне кажется, что include_path не загружает классы в этом каталоге. вот почему я получаю фатальные ошибки
наконец, я бы не ставил этот вопрос, если бы не видел его в действии раньше. я знаю, что это возможно, просто ищу руководство. Спасибо-спасибо
Это самая простая версия, которую я могу вам показать:
function __autoload($className) {
if (file_exists($className . '.php')) {
require_once $className . '.php';
}
return false;
}
Вам нужно будет принять во внимание вашу структуру каталогов, чтобы убедиться, что ваш файл загружается правильно.
Так что если у вас есть каталог с именем helpers и каталог с именем library, он может выглядеть так:
function __autoload($className) {
$directories = array('helpers', 'libraries');
foreach ($directories as $dir) {
$path = '/'.$dir.'/'$className . '.php';
if (file_exists($path)) {
require_once $path;
}
}
}
Так что … да, отвечая на мой собственный вопрос … это полностью отвечает моим потребностям:
поэтому я обнаружил, что вы можете установить директиву php, которая будет автоматически добавляться и \ или добавлять некоторые php-файлы в КАЖДЫЙ php-файл, к которому вы обращаетесь …
вот что я сделал:
в php.ini
auto_prepend_file = «require.php»
require.php содержит все мои операторы require_once …
это отвечает моим потребностям отлично 🙂 спасибо за предыдущие ответы.
Я думаю, что лучший способ сделать это — запросить все ваши файлы в индексе и запустить основной объект.
Как это:
require_once ("config/config.php");
require_once ("config/application_config.php");
require_once ("config/database.php");
require_once ("system/systemcomponent.php");
require_once ("system/program.php");$program = new Program ();
$program->run ();
И тогда вы можете заставить свой объект Program делать то, что вы хотите, чтобы ваша программа делала!
Не беспокойтесь о необходимости чего-либо, прежде чем расширяться.
ОБНОВИТЬ:
Вы также можете сделать что-то вроде этого.
//get all files in the root directory
$php_files = scandir ("./");
//take out the "." and ".." directories (used for navigating)
for ($i = 0; $i <= 2; $i++)
array_splice ($php_files, 0, 1);
//Require all found files
foreach ($php_files as $file)
require_once ($file);
Будьте осторожны, чтобы он не проглотил не .php файлы.