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

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

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

например.

function test() { require 'pathtosomeclasscode'; somestatement; // any code after the require is blocked. } 

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

Solutions Collecting From Web of "php требует вызова класса изнутри метода"

Несколько удивительно, что это работает очень хорошо. Включенный код будет выполняться внутри области 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, чтобы попытаться подробнее понять, как работают эти функции:

  • require
  • require_once
  • include
  • include_once

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

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

Если вы используете 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(); } } в 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. Вы можете переместить запрос.

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

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