无法调用类';PHP中的s函数
我有四节课。当有人访问printHi.php时,它会从不同的类中打印两次“hi”。然而: printHi.php无法调用类';PHP中的s函数,php,oop,Php,Oop,我有四节课。当有人访问printHi.php时,它会从不同的类中打印两次“hi”。然而: printHi.php include('main.php'); $main = new Main; main.php: class Main { function __construct() { include('class2.php'); include('class3.php'); $this->class2 = new class2;
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();
}
}
没有输出显示(或错误)?我做错了什么
另外,如果我想在我的所有类中使用sanity(),如果不这样做,我该怎么做呢
$this->class2 = new class2;
$this->class2->sanity();
在每节课上
您不会看到错误,因为
class class3 {
__construct() {
$this->class2 = new class2;
$this->class2->sanity();
}
}
包含一个分析错误。也就是说,您需要编写
function\uu-construct()
。因此,启用错误的方法(如error\u reporting
和ini\u set
)将不起作用,因为由于解析错误,脚本永远不会运行。因此,请查看php.ini文件,并在其中设置error_reporting和display_errors指令。完成此操作后,您应该会看到错误消息。您不会看到错误,因为
class class3 {
__construct() {
$this->class2 = new class2;
$this->class2->sanity();
}
}
包含一个分析错误。也就是说,您需要编写
function\uu-construct()
。因此,启用错误的方法(如error\u reporting
和ini\u set
)将不起作用,因为由于解析错误,脚本永远不会运行。因此,请查看php.ini文件,并在其中设置error_reporting和display_errors指令。完成此操作后,您应该会看到错误消息。正在抛出错误。您可能已经看到了一个空白屏幕,但它们正在被提升。以下是我看到的错误列表:
- Class3的构造函数缺少
声明。这应该是一个致命的分析错误函数
function __construct() {
- Class1的构造函数试图对非对象
调用方法$this->class
sanity()。这应该是一个致命的错误
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()或die()
位为redundent或die
上的Config
方法声明为sanity()
,但您试图在实例上调用它。弄清楚它是否绑定到实例(需要使用static
)并适当地进行设置。那就只适当地称呼它。如果bar是实例方法,不要调用$this
,反之亦然Foo::bar()
- 您的todo是错误的,因为
正在按它应该的方式工作需要'foo'或die()
具有更高的精确度,这就是为什么您会得到或
,因为它被解释为require 1
require('foo'或die())
- 最后,不要像这样盲目地使用
。相反,要么自动加载类,要么在已经需要文件的情况下使用一次require
(以防止错误)require\u
- Class3的构造函数缺少
声明。这应该是一个致命的分析错误函数
function __construct() {
- Class1的构造函数试图对非对象
调用方法$this->class
sanity()。这应该是一个致命的错误
正在抛出错误。您可能已经看到了一个空白屏幕,但它们正在被提升。以下是我看到的错误列表:
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()或die()
位为redundent或die
上的Config
方法声明为sanity()
,但您试图在实例上调用它。弄清楚它是否绑定到实例(需要使用static
)并适当地进行设置。那就只适当地称呼它。如果bar是实例方法,不要调用$this
,反之亦然Foo::bar()
- 您的todo是错误的,因为
正在按它应该的方式工作需要'foo'或die()
具有更高的精确度,这就是为什么您会得到或
,因为它被解释为require 1
require('foo'或die())
- 最后,不要像这样盲目地使用
。相反,要么自动加载类,要么在已经需要文件的情况下使用一次require
(以防止错误)require\u
错误报告(0)
添加到应用程序的第一行若要查看错误,在ini文件中默认情况下似乎是错误报告。将错误报告(0)
添加到应用程序的第一行若要查看错误,在ini文件中默认情况下似乎是错误报告。这是我的真实代码。我不想把它放在原来的帖子里,因为它很长,但是有一些打字错误