PHP5 es un lenguaje que tiene la mayoría de las características de un lenguaje orientado a objetos. Tiene muchas más características orientadas a objetos que PHP4, pero algunos conceptos son un poco confusos, así que no soy bueno para explicarlos hoy. Por favor, perdónenme, expertos (Para leer este artículo, deben comprender el conocimiento orientado a objetos de PHP5)
Primero, comprendamos las tres palabras clave anteriores: this, self, parent, que es más fácil de entender literalmente. Para esto, yo, padre, jaja, es más divertido. Primero establezcamos algunos conceptos. ¿Dónde se usan estas tres palabras clave? Expliquemos brevemente que este es un puntero al objeto actual (usemos el puntero en C para mirar). it), y self es un puntero al objeto actual. Un puntero a una clase, parent es un puntero a la clase principal. Con frecuencia usamos punteros para describir aquí porque no hay mejor idioma para expresarlo Jaja, no aprendí bien el chino. -_-#
Si no lo entiendes bien de esta manera, hablemos de ello basándonos en ejemplos reales.
(1) este
1 <?php
2
Nombre de usuario de 3 clases
4 {
5 //Definir atributos
6 privado $nombre;
7
8 //Definir constructor
9 función __construct ($ nombre)
10 {
11 $this->name = $name; //Este puntero se ha utilizado aquí.
12}
13
14 //Destructor
15 función __destruct(){}
16
17 //Imprimir función miembro de nombre de usuario
18 función imprimirNombre()
19 {
20 print($this->name); //Este puntero se usa nuevamente
veintiuno }
Veintidós }
veintitrés
24 //instanciar objeto
25 $nombreObjeto = nuevo Nombre de Usuario( "heiyeluren" );
26
27 //Ejecutar impresión
28 $nombreObjeto->printNombre(); //Salida: heiyeluren
29
30 // Segunda instanciación del objeto
31 $nombreObjeto2 = nuevo Nombre de Usuario( "PHP5" );
32
33 //Ejecutar impresión
34 $nombreObjeto2->printNombre(); //Salida: PHP5
35 ?>
Veamos que la clase anterior usa este puntero en las líneas 11 y 20 respectivamente, entonces ¿a quién apunta esto en ese momento? De hecho, esto determina a quién apunta al crear una instancia. Por ejemplo, cuando se crea una instancia del objeto por primera vez (línea 25), esto apunta al objeto $nameObject. Luego, al imprimir en la línea 18, print( $this. -><nombre) se convierte en print($nombreObjeto->nombre), luego, por supuesto, se genera "heiyeluren". En el segundo caso, print( $this->name ) se convierte en print( $nameObject2->name ), por lo que se genera "PHP5". Por lo tanto, este es un puntero a la instancia del objeto actual y no apunta a ningún otro objeto o clase.
(2)self
En primer lugar, debemos dejar claro que self apunta a la clase misma, es decir, self no apunta a ningún objeto instanciado. Generalmente, self se utiliza para apuntar a variables estáticas en la clase.
1 <?php
2
Mostrador de 3 clases
4 {
5 //Definir propiedades, incluida una variable estática
6 privado estático $firstCount = 0;
7 privado $últimoConteo;
8
9 //Constructor
10 función __construct()
11 {
12 $this->lastCount = ++selft::$firstCount; //Utilice self para llamar a variables estáticas. Al llamar a self, debe utilizar:: (símbolo de operación de campo).
13}
14
15 //Imprime el último valor
16 función imprimirLastCount()
17 {
18 imprimir( $this->lastCount );
19}
20}
veintiuno
22 //instanciar objeto
23 $countObject = nuevo Contador();
veinticuatro
25 $countObject->printLastCount() //Salida 1
26
27 ?>
Aquí solo debemos prestar atención a dos lugares, la línea 6 y la línea 12. Definimos una variable estática $firstCount en la segunda línea, y el valor inicial es 0. Luego llamamos a este valor en la línea 12, usando self para llamarlo y usando "::" para conectar en el medio, que es lo que llamar al operador de dominio, entonces lo que llamamos en este momento es la variable estática $ frestCount definida por la clase misma. Nuestra variable estática no tiene nada que ver con la instancia del siguiente objeto, solo está relacionada con la clase, entonces si llamo. la clase en sí, entonces no podemos usar esto para hacer referencia, puedes usar self para hacer referencia, porque self apunta a la clase misma y no tiene nada que ver con ninguna instancia de objeto. En otras palabras, si hay miembros estáticos en nuestra clase, también debemos usar self para llamarlos.
(3) padre
Sabemos que padre es un puntero a la clase padre. Generalmente usamos padre para llamar al constructor de la clase padre.
1 <?php
2
3 //clase base
4 clases de animales
5 {
6 //Atributos de la clase base
7 público $nombre; //nombre
8
9 //Constructor de clase base
10 función pública __construct ($ nombre)
11 {
12 $este->nombre = $nombre;
13}
14}
15
16 // Clase derivada
17 clase Persona extiende Animal //La clase Persona hereda la clase Animal
18 {
19 público $personaSexo //Género;
20 public $personaEdad //Edad
veintiuno
22 //Constructor de clase heredada
23 función __construct ($personaSexo, $personaEdad)
veinticuatro {
25 parent::__construct( "heiyeluren" ); //Usa parent para llamar al constructor de la clase padre
26 $this->personaSexo = $personaSexo;
27 $this->personaEdad = $personaEdad;
28 }
29
30 función imprimirPersona()
31 {
32 print( $this->name. " es " .$this->personSex. ",este año " .$this->personAge );
33}
34}
35
36 //Crear una instancia del objeto Persona
37 $personaObjeto = nueva Persona( "masculino", "21");
38
39 //Ejecutar impresión
40 $personObject->printPerson(); //Salida: heiyeluren es hombre, este año 21
41
42?>
Prestamos atención a los siguientes detalles: los atributos de los miembros son todos públicos, especialmente los de la clase padre, para que las clases heredadas accedan a través de esta. Prestamos atención al punto clave, línea 25: parent::__construct( "heiyeluren" ). En este momento, usamos parent para llamar al constructor de la clase principal para inicializar la clase principal, porque los miembros de la clase principal son. todo público, por lo que podemos usar esto directamente para llamar a la clase heredada.
Resumen:
este es un puntero a una instancia de objeto, self es una referencia a la clase misma y parent es una referencia a la clase principal.
Básicamente, eso es todo lo que sé. Debe haber algunos malentendidos.
Mi correo electrónico: [email protected]
Hora de escritura: 2004-11-3 18:30
http://dev.csdn.net/author/heiyeshuwu/702e33d6abaf4be58c06f1b55cf0fc8c.html