Автоматическое требование при переполнении стека

цель: я хочу иметь возможность расширять любой класс php, используя оператор extends и оператор NO require, например:

<?php

class some_child extends some_parent{

}

?>

НО в настоящее время я должен сделать это:

<?php

require_once("some_parent.php");

class some_child extends some_parent{

}

?>

Просто отметить:

  1. родительский класс НЕ находится в той же папке, что и дочерний
  2. php.ini как было установлено правильно, чтобы включить путь к родителю … так что все в порядке.

ВОПРОС
как мне этого достичь, то есть расширить родительский класс, не требуя этого?

заранее извиняюсь, если это НЕ конструктивно, я никогда не знаю правил здесь. ТИА

РЕДАКТИРОВАТЬ

просто чтобы быть яснее, я ищу решение «за кулисами», надеясь, что я мог бы установить что-то в htaccess или php.ini, чтобы не только включать необходимые файлы, но и загружать их, мне кажется, что include_path не загружает классы в этом каталоге. вот почему я получаю фатальные ошибки

наконец, я бы не ставил этот вопрос, если бы не видел его в действии раньше. я знаю, что это возможно, просто ищу руководство. Спасибо-спасибо

0

Решение

Это самая простая версия, которую я могу вам показать:

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;
}
}
}
3

Другие решения

Так что … да, отвечая на мой собственный вопрос … это полностью отвечает моим потребностям:

поэтому я обнаружил, что вы можете установить директиву php, которая будет автоматически добавляться и \ или добавлять некоторые php-файлы в КАЖДЫЙ php-файл, к которому вы обращаетесь …

вот что я сделал:

в php.ini

auto_prepend_file = «require.php»

require.php содержит все мои операторы require_once …

это отвечает моим потребностям отлично 🙂 спасибо за предыдущие ответы.

0

Я думаю, что лучший способ сделать это — запросить все ваши файлы в индексе и запустить основной объект.
Как это:

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 файлы.

-2
По вопросам рекламы [email protected]