Aquí está mi propiedad de clase
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 me da errores como
Fatal error: Using $this when not in object context...
Luego intenté acceder a la propiedad de esta manera. self::my_paths['imagemagick']
pero eso no ayudó.
¿Cómo debería manejar esto?
Jens
necesitas el $
firme delante del nombre de la variable/propiedad, por lo que se convierte en:
self::$my_paths['imagemagick']
Y my_paths
no se declara como estático. Así que necesitas que sea
private static $my_paths = array(...);
Cuando no tiene la static
palabra clave delante de él, espera ser instanciado en un objeto.
-
Ese era mi problema, perder el
$
cuando probaría una propiedad estática gracias– Jason Davis
9 de enero de 2012 a las 8:41
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.
-
esta es la respuesta correcta ya que la respuesta seleccionada arrojará
PHP Fatal Error : Access to undeclared static property
–Muhammad Omer Aslam
10 de julio de 2018 a las 12:24
convertirlo en 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 llámalo así
self::$my_paths['pngcrush'];
Si es posible, también podría hacer que su variable my_path sea estática.
self::my_paths['imagemagick']
no funciona, porque la matriz es privada y no se puede usar en un contexto estático.
Haga que su variable sea estática y debería funcionar.
Los métodos estáticos en una clase no pueden acceder a las propiedades no estáticas en la misma clase.
Debido a que se puede llamar a los métodos estáticos sin una instancia del objeto creado, la pseudovariable
$this
no está disponible dentro del método declarado como estático.
Si no desea acceder a las propiedades de la misma clase, debe definirlas como estáticas.
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();
Hágalos estáticos y
self
trabajará– matiño
9 de enero de 2012 a las 8:35