静态函数可以在php中访问非静态变量吗?

use*_*198 8 php static-variables

<?php
    class Stat
    {
        public $var1='H';
        public static $staticVar = 'Static var';


        static function check()
        {

            echo $this->var1;               
            echo "<br />".self::$staticVar ."<br />";
            self::$staticVar = 'Changed Static';
            echo self::$staticVar."<br />";
        }
        function check2()
        {
            Stat::check();
            echo $this->var1;           
            echo "b";
        }
    }

?>
Run Code Online (Sandbox Code Playgroud)

我可以像这样使用它吗?

$a = new Stat();
$a->check2();
Run Code Online (Sandbox Code Playgroud)

Mat*_*ndh 10

不可以.静态方法无法访问$this(因为$this在静态上下文中没有讨论).

如果需要在静态方法中引用当前对象,则它不是静态方法.但是,您可以从非静态方法访问静态属性和函数.


Flo*_*ine 5

正如其他答案所说,您不能在静态方法中使用实例方法。但是,您可以将静态属性存储为实例数组。用一些这样的代码:

private static $_instances = array();

public function __construct() {
    self::$_instances[] = $this;
}
Run Code Online (Sandbox Code Playgroud)

这样,您可以在静态方法中的所有实例上调用方法。用一些这样的代码:

public static effItAll() {
    foreach (self::$_instances as $instance) {
        $instance->instanceMethod();
    }
}
Run Code Online (Sandbox Code Playgroud)

或者你也可以只存储最后一个实例。或者一些实例取决于参数。无论如何,您可以将任何实例存储在静态属性中,从而能够在您的静态方法中调用此实例。