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

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?

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.

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.

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.

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'];