Commit 002fc2fd by HaruAtari

Translate docs (guide/concept-properties.md) to russian: corrected grammatical errors.

parent c1afb041
...@@ -7,14 +7,14 @@ ...@@ -7,14 +7,14 @@
$object->label = trim($label); $object->label = trim($label);
``` ```
Недостатком приведенного выше кода является то, что вам придется вызывать функцию `trim()` во всех местах, где вы присваиваете значение полю `label`. Если в будущем понадобится производить еще какие-либо действие, например возводить первую букву в верхний регистр, вам придется изменить каждый участок кода, где производится присваивание занчения полю `label`. Повторение кода приводит к ошибкам и по возможности нужно избегать такой практики. Недостатком приведенного выше кода является то, что вам придется вызывать функцию `trim()` во всех местах, где вы присваиваете значение полю `label`. Если в будущем понадобится производить еще какие-либо действие, например возводить первую букву в верхний регистр, вам придется изменить каждый участок кода, где производится присваивание значения полю `label`. Повторение кода приводит к ошибкам и по возможности нужно избегать такой практики.
Что бы решить эту проблему, в Yii был добавлен базовый класс [[yii\base\Object]] который реализует работу со свойствами через *геттеры* и *сеттеры*. Если вашему классу нужна такая возможность, необходимо унаследовать его от класса [[yii\base\Object]]. Что бы решить эту проблему, в Yii был добавлен базовый класс [[yii\base\Object]] который реализует работу со свойствами через *геттеры* и *сеттеры*. Если вашему классу нужна такая возможность, необходимо унаследовать его от класса [[yii\base\Object]].
> Информация: Почти все внутренние классы Yii наследуются от [[yii\base\Object]] или его потомков. > Информация: Почти все внутренние классы Yii наследуются от [[yii\base\Object]] или его потомков.
Это значит, что всякий раз, когда вы встречаете геттер или сеттер в классах фреймворка, вы можете обращаться к нему, как к свойству. Это значит, что всякий раз, когда вы встречаете геттер или сеттер в классах фреймворка, вы можете обращаться к нему, как к свойству.
Геттер - это метод, чье название начинается со слова `get`; имя сеттера начинается со слова `set`. А часть названия после префикса `get` или `set` определяет имя свойства. Например, геттер `getLabel()` и/или сеттер `setLabel()` определяют свойство `label`, как показанно в коде ниже: Геттер - это метод, чье название начинается со слова `get`; имя сеттера начинается со слова `set`. А часть названия после префикса `get` или `set` определяет имя свойства. Например, геттер `getLabel()` и/или сеттер `setLabel()` определяют свойство `label`, как показано в коде ниже:
```php ```php
namespace app\components; namespace app\components;
...@@ -39,7 +39,7 @@ class Foo extend Object ...@@ -39,7 +39,7 @@ class Foo extend Object
*(Для наглядности, здесь геттер и сеттер реализуют свойство `label`, но значение хранят в закрытом свойстве `_label`).* *(Для наглядности, здесь геттер и сеттер реализуют свойство `label`, но значение хранят в закрытом свойстве `_label`).*
Свойства, определенные с помощью геттеров и сеттеров можно использовать как обычные свойства класса. Главное отличие в том, что когда происходит чтение такого свойства, вызывается соответствующий геттер; а когда происходит присвоение значения такому свойству - запускается соотвествующий сеттер. Например: Свойства, определенные с помощью геттеров и сеттеров можно использовать как обычные свойства класса. Главное отличие в том, что когда происходит чтение такого свойства, вызывается соответствующий геттер; а когда происходит присвоение значения такому свойству - запускается соответствующий сеттер. Например:
```php ```php
// Идентично вызову $label = $object->getLabel(); // Идентично вызову $label = $object->getLabel();
...@@ -54,11 +54,11 @@ $object->label = 'abc'; ...@@ -54,11 +54,11 @@ $object->label = 'abc';
При определении свойств класса при помощи геттеров и сеттеров нужно помнить о некоторых правилах и ограничениях: При определении свойств класса при помощи геттеров и сеттеров нужно помнить о некоторых правилах и ограничениях:
* Имена таких свойств *регистронезависимы*. Таким образом, `$object->label` и `$object->Label` - одно и то же. * Имена таких свойств *регистронезависимы*. Таким образом, `$object->label` и `$object->Label` - одно и то же.
Это обусловленно тем, что имена методов в PHP регистронезависимы. Это обусловлено тем, что имена методов в PHP регистронезависимы.
* Если имя такого свойства уже используется переменной-членом класса, то последнее будет иметь более высокий приоритет. * Если имя такого свойства уже используется переменной-членом класса, то последнее будет иметь более высокий приоритет.
Например, если в классе `Foo` объявлено свойство `label`, то при вызове `$object->label = 'abc'` будет напрямую изменено значение свойста `label`. А метод `setLabel()` не будет вызван. Например, если в классе `Foo` объявлено свойство `label`, то при вызове `$object->label = 'abc'` будет напрямую изменено значение свойства `label`. А метод `setLabel()` не будет вызван.
* Свойства, объявленные таким образом, не поддерживают идентификаторы видимости. Это значит, что объявление геттера или сеттера как открытого, защищенното или закрытого никак не скажется на области видимости свойства. * Свойства, объявленные таким образом, не поддерживают идентификаторы видимости. Это значит, что объявление геттера или сеттера как открытого, защищенного или закрытого никак не скажется на области видимости свойства.
* Свойства могут быть объявлены только с помощью *нестатичных* геттеров и/или сеттеров. Статичные методы не будут обрататываться подобным образом. * Свойства могут быть объявлены только с помощью *нестатичных* геттеров и/или сеттеров. Статичные методы не будут обрабатываться подобным образом.
Возвращаясь к проблеме, описанной в начале этого руководства, касаемой необходимости вызова функции `trim()` во всех местах, где присваивается значение свойству `label`. Функцию `trim()` необходимо вызывать только один раз - в методе `setLabel()`. Тогда при возникновении нового требования (возведение первой буквы в верхний регистр), это можно будет быстро сделать, не затрагивая остальной код. Нужно будет просто изменить метод `setLabel()`. Такое изменение будет распространяться на все присвоения значения свойству `label`. Возвращаясь к проблеме, описанной в начале этого руководства, касающейся необходимости вызова функции `trim()` во всех местах, где присваивается значение свойству `label`. Функцию `trim()` необходимо вызывать только один раз - в методе `setLabel()`. Тогда при возникновении нового требования (возведение первой буквы в верхний регистр), это можно будет быстро сделать, не затрагивая остальной код. Нужно будет просто изменить метод `setLabel()`. Такое изменение будет распространяться на все присвоения значения свойству `label`.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment