php требуют вызова класса из метода

от моего понимания потребуйте кода вставок в вызов php файл.

что, если бы Вы требовали из метода..., чтобы он вставил бы весь код/класс в методе, блокируя следующий оператор в методе.

например.

  function test() {

    require 'pathtosomeclasscode';
    somestatement; // any code after the require is blocked.

 }

как я обхожу это, чтобы смочь потребовать кода где когда-либо, без него вставляемый в том точном месте?

11
задан hakre 24 December 2012 в 23:39
поделиться

6 ответов

К некоторому удивлению, это работает просто отлично. Включенный код будет выполняться внутри области видимости Baz::bork() - но этот код просто определяет класс, а классы глобальны. В итоге вы получаете определенный класс.

Файл: Foo.php:

<?PHP
class Foo{
      function bar(){
               echo "Hello from Foo::bar()!\n";
      }
}

Файл: Baz.php:

<?PHP
class Baz{

      function bork(){
               require_once "Foo.php";
               $f = new Foo();
           $f->bar();
      }
}

echo "testing internal definition:\n";
$b = new Baz();
$b->bork();

echo "\ntesting in global scope:\n";

$f = new Foo();
$f->bar();
echo "\nall done\n";

Выход:

$ php Baz.php
testing internal definition:
Hello from Foo::bar()!

testing in global scope:
Hello from Foo::bar()!

all done

Теперь, я не могу придумать много мест, где вы захотите сделать все таким образом. Люди обычно требуют require_once() все возможные зависимости в верхней части файла класса, вне определения класса.

19
ответ дан 3 December 2019 в 03:17
поделиться

Вызов требует , require_once , include или include_once не остановит выполнение кода в вашей функции , если не возникнет проблема с включенным скриптом .Код во включенном файле выполняется в той же области , что и функция (при этом определенные функции и классы являются глобальными), а не вставляется в нее, заменяя то, что есть еще.

В других ответах рекомендуется использовать одну из альтернатив require в качестве решения - эти решения могут работать для вас, если ошибка в ваших сценариях связана с конфликтом в именовании (т. Е. Попыткой переопределения класс или функцию), в противном случае вы можете предоставить нам более подробную информацию о том, что произошло (или не произошло), чтобы заставить вас думать, что существует проблема, чтобы мы могли помочь вам решить настоящую причину.

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

Отправьте сообщение еще раз, если у вас есть дополнительные вопросы по их работая после изучения их.

7
ответ дан 3 December 2019 в 03:17
поделиться

Если вы используете include_once ('script.php'), вы не столкнетесь с ошибками, связанными с переобъявлением классов.

Я сам не пробовал следующее, но думаю, что эта настройка также может сработать, если вы не хотите дублировать include_once ():

class Whatever {

    protected $classObject;
    public function __construct( /*...*/ ) {
        include('anotherClass.php');
        $this->classObject = new anotherClass();
    }

    public function someFunction( /*...*/ ) {
        $this->classObject->classObjectFunction();
    }

    public function anotherFunction( /*...*/ ) {
        $this->classObject->classObjectFunction();
    }
}

Затем вы можете вызвать следующий код, каждый из которых будет вызывать функцию в том же объекте общего класса:

$Whatever = new Whatever();
$Whatever->someFunction();
$Whatever->anotherFunction();
1
ответ дан 3 December 2019 в 03:17
поделиться

попробовать require_once? Просто включите его в другое место.

1
ответ дан 3 December 2019 в 03:17
поделиться

Я думаю, вы хотите сказать, что не хотите, чтобы код выполнялся сразу. Если это верно, у вас есть несколько вариантов:

  1. Вы можете переместить require.

  2. Вы также можете прочитать файл с помощью fopen(), а затем разобрать его. (Вы не можете вызвать eval, потому что он не поймет HTML, но вы можете сделать это с помощью парсера)

0
ответ дан 3 December 2019 в 03:17
поделиться

Как я вижу, вы используете внешние файлы для загрузки классов, я прав? Почему бы вам не использовать Автозагрузка классов. Я знаю, что это не сработает, если вы хотите загружать разные тела классов в разных обстоятельствах, но я действительно не знаю, хорошая ли это практика.

0
ответ дан 3 December 2019 в 03:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: