Авто Требуется в PHP

0

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

<?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 не загружает классы в этот каталог. вот почему я получаю фатальные ошибки

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

Теги:
require
extends

3 ответа

0
Лучший ответ

Итак... да, отвечая на мой собственный вопрос... это удовлетворяет мои потребности:

поэтому я узнал, что вы можете установить директиву php, которая автоматически добавит и\или добавит некоторый php файл в любой файл php, к которому вы обращаетесь...

это то, что я сделал:

в php.ini

auto_prepend_file = "require.php"

require.php содержит все мои требования require_once...

что отвечает моим потребностям совершенно :) спасибо за предыдущие ответы.

3

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

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; 
      }
   } 
}
  • 0
    так что это пошло бы в дочернем классе да? если это так, я пытаюсь устранить количество кода, которое я добавляю в дочерний класс ... причина в том, что если у меня 50 детей, расширяющих одного и того же родителя ... мне придется делать эту автозагрузку каждый раз .... я уверен, что вы может понять избыточность. цени ответ хотя :)
  • 0
    Нет, вы просто помещаете это в собственный файл и добавляете в начало своего приложения. Вы должны включить это только один раз.
Показать ещё 2 комментария
-2

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

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.

  • 1
    Пожалуйста, взгляните на PHP autoload autoload php.net/manual/en/language.oop5.autoload.php
  • 0
    Я не знал об этой функции, большое спасибо за уведомление.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню