2012-06-01 17 views
8

Tengo una clase padre y una subclase, la clase padre tiene un constructer que establece un var y me gustaría usar ese var en la subclase, lo tengo funcionando pero me confundo con la palabra clave parent?¿Accediendo a una variable de los padres de la subclase php y la palabra clave principal?

Ejemplo

class Sub extends Parent { 
    public function foo() { 
     echo $this -> myVar; 
    } 
} 

class Parent { 
    var $myVar; 
    public function __construct() { 
      $this -> myVar = 'a'; 
    } 
} 

Esto funcionó y me da el valor de myVar, pero se supone que voy a estar usando la palabra clave parent y cuando lo hago me sale un error, ejemplo,

class Sub extends Parent { 
    public function foo() { 
     echo parent -> myVar; 
    } 
} 

class Parent { 
    var $myVar; 
    public function __construct() { 
      $this -> myVar = 'a'; 
    } 
} 

Respuesta

12

en primer lugar, los padres es una palabra reservada. En segundo lugar, no use var a menos que esté usando una versión anterior de PHP. Puedes usar protegido No necesita usar la palabra clave principal para acceder a la variable porque la clase hija debe heredarla. Puede acceder a ella a través de $this->myVar

EDITAR aclarar

Sólo es necesario utilizar métodos parent:: cuando el acceso de la clase base o static variables de la clase base. Si intenta acceder a una variable no estática de la clase base, obtendrá un error Access to undeclared static property" fatal error:

Aquí hay un ejemplo para comenzar.

<?php 
class Animal{ 
    protected $myVar; 
    public function __construct() { 
      $this->myVar = 'a'; 
    } 
} 

class Cat extends Animal { 
    public function foo() { 
     echo $this->myVar; 
    } 
} 

$cat = new Cat(); 
$cat->foo(); 

?> 

Here's un ejemplo de trabajo de este código.

+0

Ye Estoy usando php 5.3 gracias por la información :) – hadley

+0

¿Por qué dice en el manual usar la palabra clave 'parent' cuando se accede a la clase padre? ¿Cómo es que no tengo que usarlo aquí? Gracias otra vez amigo – hadley

+1

Solo necesitas usar 'parent ::' cuando accedes a los métodos de la clase base o variables estáticas de la clase base. Si intenta acceder a una variable no estática de la clase base, obtendrá un error "Acceso a la propiedad estática no declarada" error fatal: 'Marque esta respuesta como respuesta si esta respuesta lo ayudó :-) –

1

palabra clave parent se debe utilizar para los métodos de acceso o estáticas variables de clase padre solamente, por lo que su primer código es el adecuado, ya que $myVar no es estática.

Cuestiones relacionadas