据我了解,需要将代码粘贴到调用 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
或不会停止函数内代码的执行。包含文件中的代码与函数在同一范围内执行(定义的函数和类是全局的),而不是插入其中,替换那里的其他代码。require_once
include
include_once
其他答案建议使用替代方案之一require
作为解决方案 - 如果脚本中的错误与命名冲突有关(即尝试重新定义类或函数),这些解决方案可能对您有用,否则您可能希望让我们更详细地了解已经发生(或未发生)的事情,让您认为有问题,以便我们帮助您解决真正的原因。
进一步说明,这些文件包含方法不会将代码粘贴到您的脚本中。粘贴是人们用来维护文本的工具。我建议您阅读 PHP 手册以尝试进一步了解这些函数的工作原理:
如果您在调查后对他们的工作有进一步的疑问,请再次发布。
试试require_once?以防万一您将其包括在其他地方。
如果你使用 include_once('script.php') 你不会遇到关于类被重新声明的错误。
我自己没有尝试过以下操作,但我认为如果您不想重复包含_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();
我认为您的意思是您不希望代码立即执行。如果这是正确的,你有几个选择:
您可以移动需求。
您还可以使用 fopen() 读取文件,然后对其进行解析。(你不能调用 eval 因为它不理解 HTML,但你可以用解析器来做)
如我所见,您正在使用外部文件来加载类,对吗?你为什么不使用自动加载类。我知道当你想在不同的情况下加载不同的类时它不会起作用,但我真的不知道这是否是一个好习惯。