不能在PHP中调用类的功能我有4个类,在PHP中是
。当有人去printHi.php时,它会打印两次“hi” - 来自不同的类。但是:不能在PHP中调用类的功能我有4个类,在PHP中是
printHi.php
include('main.php');
$main = new Main;
main.php:
class Main {
function __construct() {
include('class2.php');
include('class3.php');
$this->class2 = new class2;
$this->class3 = new class3;
$this->class2->sanity();
}
}
class2.php
class class2 {
public function sanity() {
echo "Hi.";
}
}
class3.php
class class3 {
function __construct() {
$this->class2 = new class2;
$this->class2->sanity();
}
}
不输出显示(或错误)?我究竟做错了什么?
另外,如果我想用理智()在所有我的班,我将如何做,没有在每个班级做
$this->class2 = new class2;
$this->class2->sanity();
?可能
错误正在抛出。您可能有error_reporting turned off,并且看到一个空白屏幕,但它们正在提出。以下是我可以看到的错误列表:
-
Class3的构造函数缺少
function
声明。这应该是一个致命解析错误function __construct() {
1类的构造函数试图调用该方法
sanity()
非对象$this->class
上。这应该是一个致命的错误。
所以,显然这不是你的实际代码。假设你只是在谈论让Class2
可用于所有类,我会建议依赖注入。所以:
class Main {
public function __construct(class2 $class2, Class3 $class3) {
$this->class2 = $class2;
$this->class3 = $class3;
$this->class2->sanity();
}
}
class Class2 {
public function sanity() {...}
}
class Class3 {
public function __construct(Class2 $class2) {
$this->class2 = $class2;
}
}
这样一来,一切都在传递它更灵活,更容易理解和调试,并远更容易测试。
编辑:基于链接的代码:
有几个问题。
注入您的依赖关系。不要只是在任何地方创建新的实例(硬编码关系)
正确缩进您的代码。可读性是王道。 总是缩进。
require() or die()
是毫无意义的。如果失败,require
将结束执行。or die
位是重复的。Config
上的sanity()
方法声明为static
,但您试图在实例上调用它。找出它是否与实例绑定(需要使用$this
),并将其适当地设置。然后只适当地调用它。如果bar是实例方法,则不要调用Foo::bar()
,反之亦然。你的待办事项是错误的,因为
require 'foo' or die()
正在工作应该如何。OR
具有较高的precidence,所以这就是为什么你require 1
因为它解释为require ('foo' or die())
...最后,不要使用
require
一味这样。相反,要么自动加载您的课程,要么在文件已被要求的情况下使用require_once
(以防止错误)。
这是我的真实代码。我不想将它放在原始文章中,因为它很长,但是您提到的一些拼写错误不在我的真实代码中。 http://pastebin.com/HHyQfvhW – 2011-02-02 19:13:00
您没有看到错误,因为
class class3 {
__construct() {
$this->class2 = new class2;
$this->class2->sanity();
}
}
包含语法错误。即,您需要编写function __construct()
。因此,打开错误(如error_reporting
和ini_set
)的方法将不起作用,因为脚本从未因分析错误而运行。因此,请查看您的php.ini文件,并在其中设置error_reporting和display_errors指令。完成后,你应该看到你的错误信息。
将`error_reporting(0)`添加到应用程序的第一行以查看错误,它看起来像ini文件中的默认错误报告。 – RobertPitt 2011-02-02 19:09:34