цель: я хочу, чтобы иметь возможность распространять любой php-класс, просто используя инструкцию extends, и NO require statement:
<?php
class some_child extends some_parent{
}
?>
НО в настоящее время я должен сделать это:
<?php
require_once("some_parent.php");
class some_child extends some_parent{
}
?>
Просто отметить:
ВОПРОС: Как я могу достичь этого, т.е. расширить родительский класс, не требуя этого?
извиняюсь заранее, если это несколько НЕ конструктивно, я никогда не знаю правил здесь. ТИА
РЕДАКТИРОВАТЬ
просто для того, чтобы быть более прозрачным, я ищу решение "за кулисами", надеясь, что смогу установить что-то в htaccess или php.ini, чтобы не только включать в себя необходимые файлы, но и загружать их, мне кажется, что include_path не загружает классы в этот каталог. вот почему я получаю фатальные ошибки
наконец, я бы не поставил этот вопрос, если бы я не видел его в действии раньше. Я знаю, что это возможно, просто ищу некоторые рекомендации. Спасибо-спасибо
Итак... да, отвечая на мой собственный вопрос... это удовлетворяет мои потребности:
поэтому я узнал, что вы можете установить директиву php, которая автоматически добавит и\или добавит некоторый php файл в любой файл php, к которому вы обращаетесь...
это то, что я сделал:
в php.ini
auto_prepend_file = "require.php"
require.php содержит все мои требования require_once...
что отвечает моим потребностям совершенно :) спасибо за предыдущие ответы.
Это простейшая версия, которую я могу вам показать:
function __autoload($className) {
if (file_exists($className . '.php')) {
require_once $className . '.php';
}
return false;
}
Вам нужно будет забрать в свой аккаунт структуру каталогов, чтобы убедиться, что ваш файл загружен правильно.
Поэтому, если у вас есть каталог под названием "помощники" и каталог с именами библиотек, он может выглядеть так:
function __autoload($className) {
$directories = array('helpers', 'libraries');
foreach ($directories as $dir) {
$path = '/'.$dir.'/'$className . '.php';
if (file_exists($path)) {
require_once $path;
}
}
}
Лучший способ сделать это, я думаю, требует всех ваших файлов в вашем индексе, а затем запускает основной объект. Как это:
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 ();
И затем вы можете сделать свой объект программы тем, что вы хотите, чтобы ваша программа делала! Не волнуйтесь о необходимости чего-либо перед расширением.
ОБНОВИТЬ:
Вы также можете сделать что-то подобное.
//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.
PHP autoload
autoload php.net/manual/en/language.oop5.autoload.php