Reputation: 48933
Here is my class property
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'
);
There is a static method in the same class...
public static function is_image($file_path)
{
$imagemagick = $this->my_paths['imagemagick']. '\identify';
echo $imagemagick;
}
Of course this gives me errors like
Fatal error: Using $this when not in object context...
I then tried accessing the property like this self::my_paths['imagemagick']
but that did not help.
How should I handle this?
Upvotes: 28
Views: 33325
Reputation: 1315
You need the $
sign in front of the variable/property name, so it becomes:
self::$my_paths['imagemagick']
And my_paths
is not declared as static. So you need it to be
private static $my_paths = array(...);
When it does not have the static
keyword in front of it, it expects to be instantiated in an object.
Upvotes: 44
Reputation: 698
Static methods in a class can't access the non static properties in the same class.
Because static methods are callable without an instance of the object created, the pseudo-variable
$this
is not available inside the method declared as static.
If you wan't to access the properties of the same class then you must define them as a static.
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();
Upvotes: 0
Reputation: 1853
make it static property
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'
);
and call it like this
self::$my_paths['pngcrush'];
Upvotes: 4
Reputation: 1805
If possible, you could make your variable my_path static also.
self::my_paths['imagemagick']
does not work, because the array is private and could not used in a static context.
Make your variable static and it should work.
Upvotes: 0
Reputation: 21449
you cannot access non-static properties in static methods, you either should create an instance of the object in the method or declare the property as static.
Upvotes: 11