另一个类的静态数组变量不允许调用第二个类的方法。

7 浏览
0 Comments

另一个类的静态数组变量不允许调用第二个类的方法。

我无法弄清楚为什么这个代码不起作用:\n

class Test
{
    public static $arData=array();
    public static function addMember(Person $member)
    {
        self::$arData[]=$member;
    }
    public static function showAll()
    {
        for($i=0;$ishow();
        }
    }
}

\n我得到的错误是:Fatal error: Call to a member function show() on a non-object。\nshow() 方法确实存在,它基本上打印出一个人的姓名和位置。\n在构造函数中,如果我将 $member 添加到 $arData 而不是执行 $member->show(),它可以正常工作。\n那么...出了什么问题?

0
0 Comments

问题的原因是在于for循环中的代码。在调用show()方法时,数组索引操作符中应该是$i而不仅仅是i

解决方法是将$i替换为$i,即将self::$arData[$i]->show();替换为self::$arData[$i]->show();

代码修正如下:

...
public static function showAll()
{
    for($i=0;$i<count(self::$arData);$i++)
    {
        self::$arData[$i]->show();
    }
}
...

感谢Stefan的指正,问题得以解决。

0
0 Comments

问题的原因是在另一个类的静态数组变量中调用第二个类的方法时不允许使用。这可能是因为静态数组变量是在类的上下文之外声明的,因此无法直接访问类的方法。解决方法是使用foreach循环遍历数组,并在循环体内调用类的方法。这样可以绕过在变量前面缺少$符号的问题,并且避免在每次迭代中计算数组的长度。

以下是解决方法的示例代码:

foreach (self::$arData as $person) {
    $person->show();
}

0
0 Comments

静态数组变量不能调用另一个类的方法的问题出现的原因是因为静态数组变量只能直接访问类的静态属性,不能直接调用类的方法。

要解决这个问题,可以使用以下方法:

1. 将静态数组变量改为非静态数组变量。这样可以通过实例化类的对象来调用方法。例如:

$obj = new AnotherClass();
$obj->show();

2. 在静态数组变量的类中添加一个静态方法,用于调用另一个类的方法。例如:

class MyClass {
    public static function showAnotherClassMethod($i) {
        self::$arData[$i]->show();
    }
}
MyClass::showAnotherClassMethod($i);

通过以上方法,就可以解决静态数组变量不能调用另一个类的方法的问题。

0