这是我的类属性
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']
一样访问该属性,但这没有帮助。
我该如何处理?
答案 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();