Foros del Web » Programando para Internet » PHP »

Como asignar valores a propiedades dentro de una clase

Estas en el tema de Como asignar valores a propiedades dentro de una clase en el foro de PHP en Foros del Web. Estoy trabajando con PHP 7 y tengo problemas al asignar valores a las propiedades. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original class miClase {     ...
  #1 (permalink)  
Antiguo 14/04/2020, 01:55
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 967
Antigüedad: 20 años, 11 meses
Puntos: 8
Como asignar valores a propiedades dentro de una clase

Estoy trabajando con PHP 7 y tengo problemas al asignar valores a las propiedades.
Código PHP:
Ver original
  1. class miClase {
  2.  
  3.    public propiedad1;
  4.    public propiedad2;
  5.  
  6.    public static function miMetodo($arg) {
  7.       $this -> propiedad1 = $valor1;
  8.       $this -> propiedad2 = $valor2;
  9.    }
  10.  
  11. }

Y me sale esto:
PHP Fatal error: Using $this when not in object context in "la_ruta_del_archivo"

La línea que me marca es donde dice
Código PHP:
$this -> propiedad1 $valor1
Que estoy haciendo mal?
__________________
El aprendiz.
  #2 (permalink)  
Antiguo 14/04/2020, 06:09
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años
Puntos: 68
Respuesta: Como asignar valores a propiedades dentro de una clase

Desde un método estático no puedes hacer referencia a la variable $this. Si necesitas utilizar la variable $this entonces el método no es estático. Luego:

Código PHP:
Ver original
  1. class miClase {
  2.  
  3.    public $propiedad1;
  4.    public $propiedad2;
  5.  
  6.    public function miMetodo($arg) {
  7.       $this -> propiedad1 = $valor1;
  8.       $this -> propiedad2 = $valor2;
  9.    }
  10.  
  11. }

PD: los nombres de las propiedades deben ir con $.
  #3 (permalink)  
Antiguo 14/04/2020, 08:50
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Como asignar valores a propiedades dentro de una clase

Habría que ver un poco más de tu clase y cómo la manejas, supongo que debes tener alguna instancia de la clase, tal vez usando patrón Singleton. Pero, en general, para usar métodos estáticos, también las propiedades deberían ser estáticas y acceder a ellas con self:: en lugar de $this->

Código PHP:
Ver original
  1. class miClase {
  2.      
  3.        public static $propiedad1;
  4.        public static $propiedad2;
  5.      
  6.        public static function miMetodo($arg) {
  7.           self::$propiedad1 = $valor1;
  8.           self::$propiedad2 = $valor2;
  9.        }
  10.      
  11.     }

Esto debería funcionar, sin embargo, podría no ser lo más adecuado, todo depende de cómo tengas el resto de tu clase.
__________________
- León, Guanajuato
- GV-Foto

Última edición por Triby; 14/04/2020 a las 09:55 Razón: Agregar signo $ en propiedades
  #4 (permalink)  
Antiguo 14/04/2020, 09:53
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 967
Antigüedad: 20 años, 11 meses
Puntos: 8
Respuesta: Como asignar valores a propiedades dentro de una clase

Intenté como lo sugeriste y me bota error, la clase va así
Código PHP:
Ver original
  1. class ControladorCarrito {
  2.  
  3.     public $cart = array();
  4.     public $codigo = "";
  5.     public $nombre = "";
  6.     public $marca = "";
  7.     public $modelo = "";
  8.     public $talla = "";
  9.     public $imagen = "";
  10.     public $categoria = "";
  11.     public $cantidad = 1;
  12.     public $precio = "";
  13.  
  14.     public function __construct() {
  15.         parent::__construct();
  16.  
  17.         if (isset($_SESSION['cart'])) {
  18.             $this -> cart = $_SESSION['cart'];
  19.         }
  20.     }
  21.  
  22.     public static function ctrSearchProduct($valor) {
  23.         $tabla = "productos";
  24.         $item = "codigo";
  25.         $valor = $valor;
  26.  
  27.         $producto = ModelosProductos::mdlMostrarProducto($tabla, $item, $valor);
  28.  
  29.         $status = 0;
  30.  
  31.         if ($producto) {
  32.             $this -> codigo = $producto["codProducto"];
  33.             $this -> nombre = $producto["nomProducto"];
  34.             $this -> marca = $producto["marProducto"];
  35.             $this -> modelo = $producto["modProducto"];
  36.             $this -> talla = $producto["talProducto"];
  37.             $this -> imagen = $producto["imgProducto"];
  38.             $this -> categoria = $producto["catProducto"];
  39.             $this -> cantidad = 1;
  40.             $this -> precio = $producto["pveProducto"];
  41.  
  42.             $status++;
  43.         }
  44.  
  45.         return $status;
  46.        
  47.     }
  48. }

Así como está, me bota error con el $this en la parte donde empiezo a asignar los valores en el método ctrSearchProduct

Cuando declaro las propiedades con static y asigno los valores como sugeriste:
Código PHP:
self::codigo $producto["codigo"]; 
Me bota un error diciendo que el "=" no se puede usar
__________________
El aprendiz.
  #5 (permalink)  
Antiguo 14/04/2020, 09:56
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Como asignar valores a propiedades dentro de una clase

Sí, error mío, se debe agregar $ en las propiedades, por ejemplo:

Código PHP:
Ver original
  1. self::$codigo = $producto["codigo"];

Cuál es la idea de tener un constructor para inicializar la clase y usar métodos estáticos (donde no hay un objeto o instancia de clase de por medio)?
__________________
- León, Guanajuato
- GV-Foto

Última edición por Triby; 14/04/2020 a las 10:04
  #6 (permalink)  
Antiguo 14/04/2020, 14:49
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años
Puntos: 68
Respuesta: Como asignar valores a propiedades dentro de una clase

Cambia

Código PHP:
Ver original
  1. public static function ctrSearchProduct($valor)

por:

Código PHP:
Ver original
  1. public function ctrSearchProduct($valor)

En tu código, no tiene sentido marcarla como estática, si la estás utilizando para modificar propiedades del objeto. Luego en tu código tendrías que invocarla:

Código PHP:
Ver original
  1. $carr = new ControladorCarrito();
  2. $carr->ctrSearchProduct(123)

Etiquetas: clase, propiedades
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:32.