No PHP, atributos da classe são sempre chamadas de propriedades. Esses atributos fazem parte da definição da classe e são usadas para representar o estado de uma instância da classe (para diferenciar uma instância da classe de outra). Na prática, muitas vezes você pode querer lidar com a leitura ou a escrita de propriedades de maneiras especiais. Por exemplo, você pode querer trimar uma string sempre que for atribuído um valor para a propriedade label. Você poderia usar o código a seguir para realizar esta tarefa:
$object->label = trim($label);
A desvantagem do código acima é que você teria que chamar trim () em todos os lugares onde você definir a propriedade label no seu código. Se, no futuro, a propriedade label receber um novo requisito, tais como a primeira letra deve ser capitalizado, você teria que modificar novamente todos os pedaços de código que atribui um valor para a propriedade label. A repetição de código leva a erros, e é uma prática que você deve evitar sempre que possível.
Para resolver este problema, o Yii introduz uma classe base chamada yii\base\BaseObject que suporta definições de propriedades baseadas nos métodos getter e setter da classe. Se uma classe precisar dessa funcionalidade, ela deve estender a classe yii\base\BaseObject, ou de uma classe-filha.
Informação: Quase todas as classes nativas (core) do framework Yii estendem de yii\base\BaseObject ou de uma classe-filha. Isto significa que sempre que você vê um método getter ou setter em uma classe nativa (core), você pode usá-lo como uma propriedade.
Um método getter é um método cujo nome inicia com a palavra get; um método setter inicia com set.
O nome depois do prefixo get ou set define o nome da propriedade. Por exemplo, um getter getLabel() e/ou um setter setLabel() define a propriedade chamada label, como mostrado no código a seguir:
namespace app\components;
use yii\base\BaseObject;
class Foo extends BaseObject
{
private $_label;
public function getLabel()
{
return $this->_label;
}
public function setLabel($value)
{
$this->_label = trim($value);
}
}
(Para ser claro, os métodos getter e setter criam a propriedade label, que neste caso internamente refere-se ao atributo privado chamado _label.)
Propriedades definidas por getters e setters podem ser usados como atributos da classe. A principal diferença é que quando tal propriedade é iniciada para leitura, o método getter correspondente será chamado; quando a propriedade é iniciada atribuindo um valor, o método setter correspondente será chamado. Por exemplo:
// equivalent to $label = $object->getLabel();
$label = $object->label;
// equivalent to $object->setLabel('abc');
$object->label = 'abc';
A propriedade definida por um método getter sem um método setter é somente de leitura. Tentando atribuir um valor a tal propriedade causará uma exceção InvalidCallException. Semelhantemente, uma propriedade definida por um método setter sem um método getter é somente de gravação , e tentar ler tal propriedade também causará uma exceção. Não é comum ter propriedade somente de gravação.
Existem várias regras especiais para, e limitações sobre, as propriedades definidas via getters e setters:
$object->label e $object->Label são a mesma coisa. Isso ocorre porque nomes de métodos no PHP são case-insensitive.Foo descrita acima tiver um atributo label, então a atribuição $object->label = 'abc' afetará o atributo 'label'; esta linha não executaria setLabel() método setter.Voltando para o problema descrito no início deste guia, em vez de chamar trim() em todos os lugares que um valor for atribuído a label, agora o trim() só precisa ser invocado dentro do setter setLabel(). E se uma nova exigência faz com que seja necessário que o 'label' seja inicializado capitalizado, o método setLabel() pode rapidamente ser modificado sem tocar em nenhum outro código. Esta única mudança afetará de forma global cada atribuição à propriedade label.
Found a typo, or you think this page needs improvement?
Edit it on GitHub !
Signup or Login in order to comment.