跨多个类文件访问PHP静态变量

3
我有一个PHP类文件A,其中有一个静态变量。我有一个使用类A的类文件B,并实例化它的静态变量。我想从另一个文件中的类C访问类A的静态变量。我该怎么做呢?我尝试了这个方法。我知道单例结构,但不确定它是否适用于此情况。请看下面的代码,了解我要实现的目标。请注意,我不希望使用会话。

classA.php

  <?php
   Class A{
  public static $foo = array ();
 public static function doSomething(){
   //... Do some process and instantiate static vairable $face
   self::$foo = outputofsomeprocess();
 }
}
?>

classB.php

<?php
require_once "classA.php";
class B{
public function dosomethingelse(){
    A::doSomething();
}
}
?>

classC.php

<?php
require_once "classA.php";
 class C{
    public function dosomethingelse(){
    echo A::$foo[0];
   }
  }
?>

我在C类中的echo语句返回null


3
使用A::doSomething();而不是classA::doSomething();,引用实际的类名,而不是定义它的文件名。 - Mark Baker
也许你正在寻找扩展(extends)功能。 - donald123
你如何初始化类C?如果你需要在类B中执行A::doSomething(),那么你需要扩展类B而不是A::foo[0]为空,因为它没有被设置。 - bksi
Demo - Mark Baker
@MarkBaker 我认为那个演示不是有效的。为什么?因为它在同一个文件中,我正在谈论3个分别位于3个不同文件中的类。此外,我认为唯一有效的解决方案是在不使用 require_once "classA.php" 的情况下以某种方式传递 classA 类的实例到 classC。 - user4954035
显示剩余7条评论
1个回答

0

从C#背景来看,这有点不同,但应该能解决问题。

class A1 {

    public static $foo = array();

}


<?php
require_once 'classA.php';

class B2 {

    public static function doSomethings() {

       var_dump(A1::$foo);
    }
}

B2::doSomethings();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接