Fichas
PHP - Object Oriented - OOP
Fichas del conjunto (30)
- 1Porque devemos utilizar programação orientada a objetos?Programação Orienda a Objetos (POO) é muitas vezes associado com algo mais complexo a primeira vista, porém quando analisamos a fundo vemos que é um estilo de programação muito associado a maneira como observamos as coisas no mundo real, o que facilita a solução de problemas.
- 2O que é programação orientada a objetos(POO) ?OOP( Object Oriented Programming ) é um estilo de codigo que nos permite agrupar tarefas similares em containers.
In php, container são definidos usando classes, as classes contém todas as funções e variáveis que definem um objeto, essas funções são chamadas de métodos e as variaveis de propriedades - 3Como fazemos para criar uma classe em PHP e uma instancia dessa classe(um objeto) ?Para criar uma classe devemos lembrar de seguir os padrões de codigo para melhor leitura, classes devem ser escritas com as primeiras letras em CAPS e o restante em lowercase.
class MyRecipe {
}
Então para criar uma instancia(objeto), baseado nessa classe, vamos:
$recipe1 = new MyRecipe();
assim se fizermos var_dump($recipe1);, vamos ver que $recipe1 é uma objeto/instancia da classe MyRecipe. - 4Qual é o padrão de escrita para propriedades dentro de um objeto 'public' ?São 'camel case', ou seja, iniciam com letra minuscula e as outroas palavras possuem letra maiuscula.
exemplo:
public $ingredients ou
public $dryIngredients - 5Como podemos criar as propriedades de uma instancia dentro de uma classe?class ClassName {
public property1 = array();
public property2;
public property3 = 'my title';
}
vamos que podemos iniciar variaveis que são arrays, declara-las sem definir um 'standart', ou definir um standar para as variáveis. - 6Como fazemos para acessar uma propriedade da instancia de uma classe? (um objeto derivado da classe) ~Funciona para objetos em geral~$instance_name->propertyName;
return the property value, a propriedade não é escrita com '$', isso acontece para não gerar problemas com o combilador caso exista um objeto dentro de um objeto. - 7Como funciona o 'naming convention' para metodos? -funções de um objeto-Camel Case, segue o mesmo padrão de 'naming convention' de uma variavel de uma classe.
as funções assim como as propriedades de uma classe possuem o pré 'public'
public function name
public variable name - 8Como podemos acessar as variaveis de uma classe dentro de um método?Dentro de uma função de uma classe(método), nos acessamos as vareaveis externas da função no objeto com $this->propertyName;
então vamos ter
public variable1;
public function functionName(){
$this->variable1;
}
assim nos utilizamos as propriedades do objeto dentro dos metodos do objeto. - 9como funcionanm os 'access modifiers'?Nossos controladores de acesso podem ser definidos como public, private or protected. Se nos declararmos dentro de uma classe 'var' ela será automaticamente definida como publica.
Public - Publicly accessible from anywhere, even from outside the scope of the class.
Private - Accessed within the class itself. It protects properties and methods from being access from outside the class.
Protected - Same as private, except by allowing child (sub) classes to access protected parent (super) properties and methods. - 10como funcionam as funções 'setter' de uma classe?uma função setter tem como finalidade formatar os dados que vieram para utiliza-los depois.
public function setTitle( $title ){
$this->title = ucwords($title);
}
nesse exemplo utilizamos uma propriedade da classe chamada $title, que não pode ser acessada fora da class pois esta definida como 'private', pois queremos que ela só esteja disponível se estiver devidamente formatada. - 11como funcionam as funções 'getters' de uma classe?public function getTitle(){
return $this-title;
}
com 'name convention de get ou set' essas duas funções servem para formatar dados ou obter elementos que são definidos como 'private'.
essas acess property também podem ser usadas com métodos, que são necessarios apenas em outros métodos dentro da classe e não fora dela. - 12Como podemos utilizar arrays associativos em metodos?private $measurement = array(
"oz",
"lb",
"kg",
"g",
"colheres de chá"
);
public function addIngredients($item, $amount = null, $measurement = null){
if( $amount != null && !is_float($amount) && !is_int($amount) ) :
exit('Your amount value is a incorrect element');
endif;
if( $measurement != null && in_array($measurement, $this->measurement) ) :
exit('Your measurement is incorrect');
endif;
$this->ingredients = array(
'item' => $item,
'amount' => $amount,
'measurement' => $measurement
);
}
para criar então novos ingredientes em uma instancia vamos utilizar o método acima com os parâmetros corretos, como $item obrigatorio e o restante opcional.
$instanceName->addIngredients('parameters');
então criamos a nosso metodo para obter os dados se necessário. - 13como fazemos para obter e ler os ingredientes criados em nossa função addIngredients?Primeiramente criamos uma função/metodo 'getter - prefix get' retornando o array criado:
public function getIngredients() {
return $this->ingredients;
}
Dessa forma ao chamar essa função teremos como retorno o nosso array com os ingredientes.
para formatar a resposta em arrays podemos utilizar o 'foreach'
foreach( $arrayreturn as $variable ) {
do something.
} - 14Porque preferencialmente devemos deixar as propriedades de uma classe como privadas?Primeiramente por questões de consistencia, se adicionamos getters and setters para algumas de nossas propriedades, então é bom definirmos para outroas também, é importante também pensar que talvez hoje nos não iremos formatar ou sanatizar os dados de uma propriedade mas se no futuro tivermos que o fazer, vamos precisar alterar a maneira que chamamos os dados, dificultando a implementação de modificações. Então é boa pratica aplicar GETTERS and SETTERS(add and formatize data)
- 15Como funcionam GETTERS and SETTERS?getters e setters são funções que definimos com prefixo getProperty, setProperty ou addProperty.
as funções setters são como set, então é uma função que definimos para receber os dados, assim podemos formata-los e atribui-los a uma propriedade da classe.
Exemplo:
private $property = '';
public function getProperty( $parameter ) {
$this->property = strlow($parameter);
}
as funções getters basicamente retornam a propriedade que é private. - 16se queremos manter as boas praticas de classes e queremos manipular os dados e mostra-los, como podemos fazer isso em php object oriented?Um dos principios de progrmação orientada a objetos é a 'single responsibility', o principio da 'single responsibility' nos diz que CADA class deve possuir responsabilidades sobre UMA parte da funcionalidade provida ao software.
E essa responsabilidade deve ser inteiramente armazenada e contida dentro da classe.
Adicionar e manipular os dados são uma responsabilidade, mostrar os dados podemos considerar outra, para essa outra responsabilidade vamos criar uma nova classe. Então vamos colocar qualquer metodo que mostrem os dados ou renderizem eles em um grupo(classe) separada - 17Como uma instancia de uma classe consegue utilizar métodos de outra classe?Para isso precisamos criar metodos em uma classe que por exemplo, trabalhe somente com o display dos dados - 'static', que pode ser antes ou depois do 'acess modifiers', mas devemos manter consistencia.
exemplo:
class DisplayClassObject {
public static functionName( $objectInstanceOtherClass ){
return $objectInstanceOtherClass ->METHOD . ' Aqui esta formatado para usarmos os dados.'
}
}
static é o que permite que objetos que não são instancias dessa classe utilizem os métodos dela.
para utilizar esse metodo em um objeto de outra instancia, utilizamos:
newClassName::methodName(Object); - 18Como podemos utilizar métodos staticos de classes para formatar os dados e mostrar para o usuario?class ClassName { public static function displayRecipe( $recipe ) {
$output = "";
$output .= $recipe->getTitle() . ' by ' . $recipe->getSource();
$output .= '\n' ;
e assim por diante, similar ao WORDPRESS.
return $output;
}
} - 19O que interessante pensarmos quando observamos a necessidade de um loop dentro de um método? Como fazemos para chamar uma função statica dentro de uma função statica?É um bom lugar para avaliarmos se existe algo que pode ser movido para seu proprio método.
Para utlizar em um método estatico outro método estatico da mesma classe, podemos fazer:
self::listIngredients( $parameters->getParameter() );
colocando isso em $output;
$output .= self::listIngredients( $parameters->getParameter() ); - 20Como funcionam os métodos magicos do php - magic methods - ?Nos definimos metodos magicos da mesma forma que definimos outros métodos, a magica por trás desses métodos magicos é que você nunca os chama diretamente.
eles são 'gatilhados- triggered' por certos eventos do programa.
sempre que usamos metodos magicos, utilizamos '__' doble underscore.
public functon __construct () - 21Como funciona o método 'public functon __construct ()'Para que possamos ao criar uma nova instancia da classe, já passar algumas propriedades como title, source e outra, devemos adicionar isso em __construct, para que ele manipule os dados ao criar uma nova instancia.
public function __construct($title = null)
{
$title->setTitle( $title );
});
assim ao criar uma nova instancia da classe, nos poderemos passar como paramêtro um $title.
$newObject = new ClassName('title GO HERE'); - 22Quais são e como funcionam algumas das 'Magic Constant' ?Magic Constante, são constantes que o php nos provem para utilizarmos em nosso codigo,
__CLASS__ = Retorna o nome da classe
__FILE__ = Retorna o nome do arquivo que está sendo executado.
__DIR__ = Retorna o diretorio do arquivo que está sendo executado.
__LINE__ = Retorna a linha onde essa constante está sendo chamada.
__METHOD__ = Retorna o método atual que esta sendo chamado.
get_class_methods( __CLASS__ ); = Retorna um array com todos os metodos da classe. - 23START RELATIONAL OBJECT ORIENTED PHPSTART RELATIONAL OBJECT ORIENTED PHP
- 24Como fazemos para que uma classe seja filha de outra classe, isso é tenha todas as propriedades e metodos de uma classe pai e seja possível ainda adicionar novos metodos nessa nova classe?Tudo que precisamos fazer é extender a nova classe em uma classe base.
class EspecialProduct extend Product {
}
// Dessa forma EspecialProduct vai ter todas as propriedades e métodos da class Product, isso facilita a implementação de novas funcionalidades ao produto, mantendo as boas praticas de programação. - 25Como podemos criar uma lista de html tags permitidas para serem utilizadas em uma propriedade de nossa classe?utilizamos o método strip_tags para eliminar as tags HTML e como segundo paramêtro passamos aquelas tags que são permitidas, então vamos ter:
class {
private $description;
protected $allowed_tags = '
';
public function setDescription($value)
{
$this->description = trim(strip_tags($value, $this->allowed_tags));
}
}
Assim somente serão aceitas em nossa description as tags HTML que estão na variável allowed_tags; - 26qual a diferença entre protected e private?Protected e private não permitem acessar a propriedade/metodo de fora da classe, private permite o acesso somente da classe principal não permitindo o acesso de classe filhas, protected permite o acesso das classes filhas.
- 27Como podemos utilizar métodos de classes pais de nossa classe filha em uma propriedade que só temos em nossa classe filha?Fazemos isso interando na classe pai se houver uma propriedade como a da classe filha.
Para que a classe pai tenha acesso a propriedade da classe filha nos precisamos definir a propriedade como protected - 28Porque utilizamos um método ou propriedade no modo static?static é utilizado quando queremos utilizar esse metodo ou propriedade fora do escopo do objecto, isso é, quando queremos não só utilizar quando estamos instanciando o objeto, mas também em outros lugares.
Também é importante falar que não utilizamos esses métodos static como fazemos com o métodos normais do objeto, vamos utilizar:
self::$methodName;
no lugar de , veja que no self utilizamos o dolar sing, assim podemos utilizar esse método onde quisermos, não só no momento de criar uma instancia do objeto.
$this->methodName; - 29Como fazemos para extender a funcionalidade de um método de uma classe pai?Nos colocamos a função com o mesmo nome em nossa classe filha e adicionamos ao inicio do metodo:
parent::functioName();
dessa forma tudo que tem nessa função da classe pai terá na filha, e assim podemos extender as funcionalidades.
IMPORTANTE COLOCAR OS PARAMETROS NECESSÀRIOS PARA A O METODO DA CLASSE PAI.
Exemplo::
public function functionNAME ($title, $age, $company){
parrent::functionExtendedName($title, $age);
$this->company = $company
}
// Assim nos conseguimos extender funções que possuem parametros. - 30Como usamos uma propriedade ou função statica dentro de uma classe? e fora ?dentro da classe nos usamos essas funções com self::functionName;
fora da classe nos utilizamos o método estatico com:
className:functionName();
Información
- Descripción
- asa (PHP) Technical Skills Fichas sobre PHP - Object Oriented - OOP, creado por Victor Bini el 08/05/2017.
- Creado por
- Victor Bini
- Visitas
- 12
- Valoración