使用PHP访问Static方法内的Class属性的最佳方法

时间:2012-01-09 08:32:43

标签: php oop

这是我的类属性

private $my_paths = array(
        'imagemagick' => 'E:\Server\_ImageOptimize\ImageMagick',
        'pngcrush' => 'E:\Server\_ImageOptimize\pngCrush\pngcrush.exe',
        'jpegtran' => 'E:\Server\_ImageOptimize\jpegtran\jpegtran.exe',
        'gifsicle' => 'E:\Server\_ImageOptimize\gifsicle\gifsicle.exe',
        'pngquant' => 'E:\Server\_ImageOptimize\pngquant\pngquant.exe',
        'pngout' => 'E:\Server\_ImageOptimize\pngout\pngout.exe'
);

同一个班级中有一个静态方法......

public static function is_image($file_path)
{

    $imagemagick = $this->my_paths['imagemagick']. '\identify';

    echo $imagemagick;
}

当然这给我带来了像

这样的错误
Fatal error: Using $this when not in object context...

然后我尝试像self::my_paths['imagemagick']一样访问该属性,但这没有帮助。

我该如何处理?

5 个答案:

答案 0 :(得分:24)

您需要变量/属性名称前面的$符号,因此它变为:

self::$my_paths['imagemagick']

并且my_paths未声明为静态。所以你需要它

private static $my_paths = array(...);

当它前面没有“static”关键字时,它希望在对象中实例化。

答案 1 :(得分:6)

您无法在静态方法中访问非静态属性,您应该在方法中创建对象的实例,或者将属性声明为静态。

答案 2 :(得分:2)

使其成为静态属性

   private static $my_paths = array(
    'imagemagick' => 'E:\Server\_ImageOptimize\ImageMagick',
    'pngcrush' => 'E:\Server\_ImageOptimize\pngCrush\pngcrush.exe',
    'jpegtran' => 'E:\Server\_ImageOptimize\jpegtran\jpegtran.exe',
    'gifsicle' => 'E:\Server\_ImageOptimize\gifsicle\gifsicle.exe',
    'pngquant' => 'E:\Server\_ImageOptimize\pngquant\pngquant.exe',
    'pngout' => 'E:\Server\_ImageOptimize\pngout\pngout.exe'
   );

并像这样称呼它

   self::$my_paths['pngcrush'];

答案 3 :(得分:0)

如果可能,您也可以将变量my_path设为静态。

self::my_paths['imagemagick']不起作用,因为该数组是私有的,无法在静态上下文中使用。

让你的变量保持静态,它应该可以工作。

答案 4 :(得分:0)

类中的静态方法无法访问同一类中的非静态属性。

因为静态方法可以在没有对象实例的情况下调用 创建后,伪变量$this在 方法声明为静态。

如果您不想访问同一类的属性,则必须将它们定义为静态。

Example: 
class A{
    public function __construct(){
        echo "I am Constructor of Class A !!<br>";
    }

    public $testVar = "Testing variable of class A";

    static $myStaticVar = "Static variable of Class A ..!<br>";

    static function myStaticFunction(){

  //Following will generate an Fatal error: Uncaught Error: Using $this when not in object context 
      echo $this->testVar;

 //Correct way to access the variable..
    echo Self::$myStaticVar;

    }
}

$myObj = new A(); 
A::myStaticFunction();