2012-01-09 11 views
12

Aquí está mi propiedad de clasemejor manera de acceder a la propiedad de clase dentro de un método estático con 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' 
); 

Hay un método estático en la misma clase ...

public static function is_image($file_path) 
{ 

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

    echo $imagemagick; 
} 

Por supuesto, esto da me errores como

Fatal error: Using $this when not in object context... 

me trataron entonces el acceso a la propiedad como esta self::my_paths['imagemagick'] pero eso no ayuda.

¿Cómo debo manejar esto?

+0

Hacerlos estática y 'self' trabajará – matino

Respuesta

19

Se necesita el signo $ delante del nombre de la variable/propiedad, por lo que se convierte en:

self::$my_paths['imagemagick'] 

Y my_paths no se ha declarado como static. Así que hay que ser

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

Cuando no tiene la palabra clave "estática" en frente de ella, que espera que deberían ejecutarse en un objeto.

+0

Ese era mi problema, la falta de la' '$ cuando me gustaría probar una propiedad estática gracias – JasonDavis

4

no puede acceder a propiedades no estáticas en métodos estáticos, debe crear una instancia del objeto en el método o declarar la propiedad como estática.

0

Si es posible, también puede hacer que su variable my_path estética.

self::my_paths['imagemagick'] no funciona, porque la matriz es privada y no se pudo usar en un contexto estático.

Haga que su variable sea estática y debería funcionar.

1

hacen que sea propiedad estática

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

y lo llaman como esto

self::$my_paths['pngcrush']; 
Cuestiones relacionadas