от моего понимания потребуйте кода вставок в вызов php файл.
что, если бы Вы требовали из метода..., чтобы он вставил бы весь код/класс в методе, блокируя следующий оператор в методе.
например.
function test() {
require 'pathtosomeclasscode';
somestatement; // any code after the require is blocked.
}
как я обхожу это, чтобы смочь потребовать кода где когда-либо, без него вставляемый в том точном месте?
К некоторому удивлению, это работает просто отлично. Включенный код будет выполняться внутри области видимости 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() все возможные зависимости в верхней части файла класса, вне определения класса.
Вызов требует
, require_once
, include
или include_once
не остановит выполнение кода в вашей функции , если не возникнет проблема с включенным скриптом .Код во включенном файле выполняется в той же области , что и функция (при этом определенные функции и классы являются глобальными), а не вставляется в нее, заменяя то, что есть еще.
В других ответах рекомендуется использовать одну из альтернатив require
в качестве решения - эти решения могут работать для вас, если ошибка в ваших сценариях связана с конфликтом в именовании (т. Е. Попыткой переопределения класс или функцию), в противном случае вы можете предоставить нам более подробную информацию о том, что произошло (или не произошло), чтобы заставить вас думать, что существует проблема, чтобы мы могли помочь вам решить настоящую причину.
Кроме того, эти методы включения файлов не вставляют код в ваш сценарий. Вставка - это инструмент, который люди используют для поддержки текста. Я предлагаю вам прочитать руководство по PHP, чтобы попытаться лучше понять, как работают эти функции:
Отправьте сообщение еще раз, если у вас есть дополнительные вопросы по их работая после изучения их.
Если вы используете 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();
попробовать require_once? Просто включите его в другое место.
Я думаю, вы хотите сказать, что не хотите, чтобы код выполнялся сразу. Если это верно, у вас есть несколько вариантов:
Вы можете переместить require.
Вы также можете прочитать файл с помощью fopen(), а затем разобрать его. (Вы не можете вызвать eval, потому что он не поймет HTML, но вы можете сделать это с помощью парсера)
Как я вижу, вы используете внешние файлы для загрузки классов, я прав? Почему бы вам не использовать Автозагрузка классов. Я знаю, что это не сработает, если вы хотите загружать разные тела классов в разных обстоятельствах, но я действительно не знаю, хорошая ли это практика.