Visibilidade das classes PHP Orientado a Objetos em PHP - Parte 6 Introdução Esta é a parte 6 da minha série, Programação Orientada a Objetos em PHP. As palavras-chave, público, protegido e privado pode ser considerado como especificadores de acesso em classes PHP. Em PHP, acesso especificador vem sob o tema, visibilidade. Nesta parte da série eu explico visibilidade em classes PHP. Vimos um dos especificadores de acesso: público. Nesta parte da série veremos os significados de todos os três e suas aplicações.
Nota: Se você não pode ver o código ou se você acha que alguma coisa está faltando (link quebrado, imagem ausente), apenas contacte-me em [email protected]. Ou seja, contacte-me para o menor problema que você tem sobre o que você está lendo. Estrutura Classe A estrutura de uma classe é a seguinte: class className {accessspecifier propriedade; ... Accessspecifier método {...}} Um especificador de acesso é a palavra-chave, público ou protegido ou privado. Cada membro (propriedade ou método) deve ser precedida por um especificador de acesso.
Se nenhum especificador de acesso lá é (digitado) para um método, em seguida, o especificador de acesso padrão, assumida para o método é público. O que acessa a membros de classe? Membros de uma classe pode acessar outros membros (propriedades e métodos) da mesma descrição de classe. Funções, operadores, instruções e outras classes (objetos), fora a descrição da classe de uma classe particular também pode acessar membros dessa classe, quando a classe é um objeto.
Um especificador de acesso decide se deve ou não uma função ou operador ou classe, dentro ou fora da descrição da classe podem acessar o membro que controla dentro de sua classe. O membro de um especificador de acesso controla é o membro digitado próximo a ele na descrição da classe. Vou usar declarações, funções e classes nas ilustrações de acesso a membros da classe. Eu não vou usar operadores para as ilustrações. Eu vou estar usando a frase "função externa". Este refere-se a uma função ou classe método que não é um membro da classe a descrição em questão.
Além disso, vou usar a frase "declaração externo" pelo mesmo motivo. Quando eu digo uma função externa pode acessar um membro de classe, eu quero dizer a função externa pode usar o nome (variável de propriedade ou o nome do método) do elemento como argumento ou como uma variável dentro de sua definição. O especificador de acesso público com o especificador de acesso público, uma função externa pode acessar os membros públicos da classe.
O código a seguir ilustra isso (leia a explicação abaixo): class Calculator {$ num1 pública; $ num2 pública; add public function () {$ sum = $ this-> num1 + $ this-> num2; return $ soma; }} Function myFn ($ nominal) {return $ nominal; } $ Obj = new Calculator (); $ obj-> num1 = 2; $ obj-> num2 = 3; $ result = $ obj-> add (); echo $ result. "$ MyVar = myFn ($ obj-> num1); echo $ myVar;> Há uma função no código:? MyFn () Você também tem declarações que não são em qualquer função A primeira linha entre as declarações instantiates livres.. o objeto classe chamada, obj.
Linhas 2 e 3 das demonstrações gratuitas usar as propriedades da classe como variáveis. Como os alunos são públicas, as demonstrações livres podem acessar os membros da classe. Temos visto coisas assim antes, mas agora, estou usando-os para explicar o especificador, público. Linha 4 das demonstrações livres também demonstra isso. Na linha 6 das demonstrações gratuitas, a função, myFn () usa o num1 propriedade da classe como seu argumento. É poderia fazê-lo porque o membro, num1 é público na classe.
O especificador de acesso privado com o especificador de acesso privado uma função externa ou uma instrução externa não pode acessar os membros privados da classe. Com o especificador privado só um membro de uma descrição de classe pode acessar o membro particular da descrição da classe. O código a seguir mostra como apenas uma membro de uma classe pode acessar um membro particular da classe (leia a explicação abaixo): class Calculator {$ num1 privado; $ num2 privado; public function add () {$ this-> num1 = 2; $ this-> num2 = 3; $ sum = $ this-> num1 + $ this-> num2; return $ soma; }} $ Obj = new Calculator (); $ result = $ obj-> add (); echo $ result; ?> A classe tem dois membros privados (propriedades) e um membro do público (método).
Na descrição da classe, a definição do método add () usa os nomes dos membros privadas como variáveis (por exemplo, $ this-> Num1). Assim, o método add (), um membro da descrição da classe acessou os membros privados da descrição da classe. A segunda linha das demonstrações livres fora a descrição da classe tem sido capaz de acessar o método add () da classe porque o método add () é público (ele tem um especificador de acesso público).
O código a seguir não irá compilar porque a segunda instrução livre tenta acessar (uso como variável) um membro particular da classe: class Calculator {$ num1 privado; $ num2 privado; public function add () {$ this-> num1; $ this-> num2 = 3; $ sum = $ this-> num1 + $ this-> num2; return $ soma; }} $ Obj = new Calculator (); $ obj-> num1 = 2; $ result = $ obj-> add (); echo $ result; ?> A segunda linha entre as demonstrações livres é errado porque ele tenta acessar (uso como variável) o membro privado, num1.
O especificador de acesso protegido Se um membro de uma classe é público, ele pode ser acessado por uma função externa e declaração externo e também uma descrição da classe derivada. Se um membro de uma classe é privada, não pode ser acessado por uma função externa ou declaração externa; até mesmo uma classe derivada não pode acessá-lo.
A questão é, se uma classe derivada não é realmente ser capaz de acessar um membro particular da sua classe base (já que a classe classe e base de derivados estão relacionados)? Bem, para resolver este problema que você tem outra chamada especificador de acesso, protegida. Se um membro de uma classe esteja protegido, ele pode ser acessado por uma classe derivada, mas ele não pode ser acessado por uma função externa ou declaração externa. Ele também pode ser acessado por membros dentro da descrição da classe (classe base).
O código a seguir ilustra como uma classe derivada pode acessar um membro protegido de uma classe base: class Calculator {protected $ num1; protected $ num2; } Class ChildCalculator estende Calculator {add public function () {$ this-> num1 = 2; $ this-> num2 = 3; $ sum = $ this-> num1 + $ this-> num2; return $ soma; }} $ ChObj = new ChildCalculator (); $ result = $ chObj-> add (); echo $ result; ?> A classe base tem apenas duas propriedades e nenhum método; estas propriedades estão protegidos. A classe derivada tem um método e nenhuma propriedade.
Dentro da classe derivada, as propriedades protegidas da classe base são usados como variáveis. Geralmente, quando uma classe é derivado utilizando um membro de uma classe de base, que é um método de classe derivada que está a utilizar o elemento, como no presente exemplo. O código acima é OK. O código a seguir não irá compilar, porque a linha 2 entre as demonstrações gratuitas tenta acessar um membro protegido de uma classe (a classe base): class Calculator {protected $ num1; protected $ num2; } Class ChildCalculator estende Calculator {add public function () {$ this-> num1; $ this-> num2 = 3; $ sum = $ this-> num1 + $ this-> num2; return $ soma; }} $ Obj = new Calculator (); $ obj-> num1 = 2; $ chObj = new ChildCalculator (); $ result = $ chObj-> add (); echo $ result; ?>