Подтвердить что ты не робот

Лучший способ получить доступ к свойству класса внутри статического метода с помощью PHP

Вот мое свойство класса

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'], но это не помогло.

Как мне это сделать?

4b9b3361

Ответ 1

Вам нужно знак $перед именем переменной/свойства, поэтому он будет выглядеть следующим образом:

self::$my_paths['imagemagick']

И my_paths не объявлен как статический. Поэтому вам нужно

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

Если у него нет ключевого слова "статические" перед ним, он ожидает, что он будет создан в объекте.

Ответ 2

вы не можете получить доступ к нестационарным свойствам в статических методах, либо вы должны создать экземпляр объекта в методе, либо объявить свойство как статическое.

Ответ 3

сделать его статическим свойством

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

Ответ 4

Если возможно, вы также можете сделать свою переменную my_path static.

self::my_paths['imagemagick'] не работает, поскольку массив является закрытым и не может использоваться в статическом контексте.

Сделайте свою переменную статической и она должна работать.