PHP5 é uma linguagem que possui a maioria dos recursos de uma linguagem orientada a objetos. Ela possui muito mais recursos orientados a objetos que o PHP4, mas alguns conceitos são um pouco confusos, então falarei sobre isso hoje, não sou bom em explicar. Por favor, perdoem-me, especialistas (para ler este artigo, você precisa entender o conhecimento orientado a objetos do PHP5)
Primeiro, vamos entender as três palavras-chave acima: this, self, parent, que é mais fácil de entender literalmente. para isso, self, pai, haha, é mais divertido, vamos primeiro estabelecer alguns conceitos. Onde essas três palavras-chave são usadas. Vamos explicar brevemente que este é um ponteiro para o objeto atual (vamos usar o ponteiro em C para olhar). it), e self é um ponteiro para o objeto atual. Um ponteiro para uma classe, parent é um ponteiro para a classe pai. Freqüentemente usamos dicas para descrever aqui porque não há linguagem melhor para expressar isso Haha, não aprendi bem chinês. -_-#
Se você não entende bem desta forma, vamos falar sobre isso com base em exemplos reais.
(1) este
1 <?php
2
Nome de usuário de 3 classes
4 {
5 //Definir atributos
6 privado $nome;
7
8 //Definir construtor
9 função __construct( $nome )
10 {
11 $this->name = $name; //Este ponteiro foi usado aqui
12}
13
14 //Destruidor
15 função __destruct(){}
16
17 //Imprime a função membro do nome de usuário
18 função imprimirNome()
19 {
20 print($this->name); //Este ponteiro é usado novamente
vinte e um }
vinte e dois }
vinte e três
24 //instancia o objeto
25 $nomeObject = new UserName( "heiyeluren" );
26
27 //Executar impressão
28 $nameObject->printName(); //Saída: heiyeluren
29
30 //Segunda instanciação do objeto
31 $nomeObject2 = new UserName( "PHP5" );
32
33 //Executar impressão
34 $nomeObject2->printName(); //Saída: PHP5
35 ?>
Vejamos que a classe acima usa esse ponteiro nas linhas 11 e 20 respectivamente, então para quem isso aponta naquele momento? Na verdade, isso determina para quem ele aponta ao instanciá-lo. Por exemplo, quando o objeto é instanciado pela primeira vez (linha 25), então isso aponta para o objeto $nameObject. Então, ao imprimir na linha 18, print( $this. -><name) torna-se print($nameObject->name), então é claro que "heiyeluren" é gerado. Na segunda instância, print( $this->name ) se torna print( $nameObject2->name ), então "PHP5" é gerado. Portanto, este é um ponteiro para a instância do objeto atual e não aponta para nenhum outro objeto ou classe.
(2)self
Em primeiro lugar, devemos deixar claro que self aponta para a própria classe, ou seja, self não aponta para nenhum objeto instanciado. Geralmente, self é usado para apontar para variáveis estáticas na classe.
1 <?php
2
Balcão de 3 classes
4 {
5 //Definir propriedades, incluindo uma variável estática
6 privado estático $firstCount = 0;
7 privado $lastCount;
8
9 //Construtor
10 função __construct()
11 {
12 $this->lastCount = ++selft::$firstCount; //Use self para chamar variáveis estáticas. Ao chamar self, você deve usar:: (símbolo de operação de campo)
13}
14
15 //Imprime o último valor
16 funções printLastCount()
17 {
18 imprimir($this->lastCount);
19}
20}
vinte e um
22 //instancia o objeto
23 $countObject = new Contador();
vinte e quatro
25 $countObject->printLastCount(); //Saída 1
26
27 ?>
Só precisamos prestar atenção em dois lugares aqui, linha 6 e linha 12. Definimos uma variável estática $firstCount na segunda linha, e o valor inicial é 0. Em seguida, chamamos esse valor na linha 12, usando self para chamá-lo e usando "::" para conectar no meio, que é o que nós chamar operador de domínio, então o que chamamos neste momento é a variável estática $frestCount definida pela própria classe. Nossa variável estática não tem nada a ver com a instância do objeto a seguir, ela está apenas relacionada à classe, então se eu chamar. a própria classe, então não podemos usar isso para fazer referência, você pode usar self para fazer referência, porque self aponta para a própria classe e não tem nada a ver com nenhuma instância de objeto. Em outras palavras, se houver membros estáticos em nossa classe, também devemos usar self para chamá-los.
(3) parent
Sabemos que parent é um ponteiro para a classe pai. Geralmente, usamos parent para chamar o construtor da classe pai.
1 <?php
2
3 //classe base
4 classes Animal
5 {
6 //Atributos da classe base
7 público $nome; //nome
8
9 //Construtor da classe base
10 função pública __construct( $name )
11 {
12 $este->nome = $nome;
13}
14}
15
16 // Classe derivada
17 classe Person estende Animal //Classe Person herda classe Animal
18 {
19 público $pessoaSexo; //Gênero
20 público $personAge; //Idade
vinte e um
22 //Construtor da classe herdada
23 função __construct($personSex, $personAge)
vinte e quatro {
25 parent::__construct( "heiyeluren" ); //Use parent para chamar o construtor da classe pai
26 $this->personSex = $personSex;
27 $this->personAge = $personAge;
28}
29
30 funções printPerson()
31 {
32 print( $this->name. " é " .$this->personSex. ",este ano " .$this->personAge );
33}
34}
35
36 //Instancia objeto Pessoa
37 $pessoaObject = new Pessoa( "masculino", "21");
38
39 //Executar impressão
40 $personObject->printPerson(); //Saída: heiyeluren é homem, este ano 21
41
42?>
Prestamos atenção aos seguintes detalhes: os atributos dos membros são todos públicos, especialmente os da classe pai, para que as classes herdadas possam ser acessadas por meio disso. Prestamos atenção ao ponto-chave, linha 25: parent::__construct( "heiyeluren" ). Neste momento, usamos parent para chamar o construtor da classe pai para inicializar a classe pai, porque os membros da classe pai são. tudo público. Portanto, podemos usar isso diretamente para chamar a classe herdada.
Resumo:
este é um ponteiro para uma instância de objeto, self é uma referência à própria classe e parent é uma referência à classe pai.
Basicamente, isso é tudo que sei. Deve haver alguns mal-entendidos.
Meu e-mail: [email protected]
WriteTime: 3/11/2004 18:30
http://dev.csdn.net/author/heiyeshuwu/702e33d6abaf4be58c06f1b55cf0fc8c.html