据我的理解,require将代码粘贴到调用PHP文件中。
如果您在方法内部进行require操作...它将整个代码/类粘贴在该方法中,阻塞该方法中的下一条语句。
例如:
function test() {
require 'pathtosomeclasscode';
somestatement; // any code after the require is blocked.
}
我该如何解决这个问题,才能够在任何地方调用代码,而不必将其粘贴在特定位置?
据我的理解,require将代码粘贴到调用PHP文件中。
如果您在方法内部进行require操作...它将整个代码/类粘贴在该方法中,阻塞该方法中的下一条语句。
例如:
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 $dirName . "/../{$fileName}.php";
- James P.require
、require_once
、include
或include_once
不会停止函数内代码的执行,除非包含的脚本存在问题。被包含文件中的代码在与函数相同的范围内执行(定义的函数和类是全局的),而不是插入到其中替换其他内容。require
的替代方法作为解决方案——如果您的脚本错误与命名冲突有关(即尝试重新定义类或函数),则这些解决方案可能适用于您,否则您可能希望提供更多细节来说明发生了什么问题(或未发生),以便我们可以帮助您解决真正的原因。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,但你可以使用解析器)