gpt4 book ai didi

php - 从另一个类中调用一个 PHP 类

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:06:06 25 4
gpt4 key购买 nike

我猜这很简单,但为什么下面的不起作用?我猜这是从 class1 中看不到 class2 的范围。是的,我收到“在非对象上调用成员函数”错误。

class class1 {
function func1() {
$class2->func3();
}
function func2() {
$this->func1();
}
}

class class2 {
function func3() {
echo "hello!";
}
}

$class1 = new class1();
$class2 = new class2();

$class1->func1;

如果有人能帮我解决这个问题,我将不胜感激。我已经搜索了一段时间,但我得到了很多其他人试图在其他类和类似类中实例化新类的例子,而不是我遇到的这个特殊问题。

你认为我不怎么上课是对的!

最佳答案

PHP 不像 JavaScript 那样有 bubblescope,所以你的 $class2 是未定义的:

The scope of a variable is the context within which it is defined. For the most part all PHP variables only have a single scope. This single scope spans included and required files as well […] Within user-defined functions a local function scope is introduced. Any variable used inside a function is by default limited to the local function scope.

来源:http://php.net/manual/en/language.variables.scope.php

换句话说,PHP 中只有全局作用域和函数/方法作用域。因此,要么将 $class2 实例作为协作者传递到方法中

class class1 
{
function func1($class2) {
$class2->func3();
}
}

$class1 = new class1();
$class2 = new class2();
$class1->func1($class2);

或者通过构造函数注入(inject):

class class1 
{
private $class2;

public function __construct(Class2 $class2)
{
$this->class2 = $class2;
}

function func1()
{
$this->class2->func3();
}
}

$class2 = new class2();
$class1 = new class1($class2);
$class1->func1();

关于php - 从另一个类中调用一个 PHP 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12662962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com