konstantin1985
26.12.2015 - 21:01
Читаю мануал на php.net, про создание классов.По моему мнению не очень понятно обяснение использования ключевого слова $this в классе. Например вот этот код, как я понимаю присваивает свойству класса name значение.
class MyDestructableClass {
function __construct() {
print "Конструктор\n";
$this->name = "MyDestructableClass";
}
При создании объекта его свойство name уже содержит значение.Правилен ли мой вывод и если да, то для чего еще можно использовать this?
AllesKlar
26.12.2015 - 21:25
$this для обращения к свойствам / методам объекта внутри методов объекта.
_____________
[продано копирайтерам]
konstantin1985
26.12.2015 - 21:40
Это для объектов, а внутри класса?
$this - это указатель на текущий объект. Пишешь в классе вспомогательный приватный метод, который переводит цельсии в градусы. Как к нему обратиться из метода, вызванного пользователем? Вот и пишешь:
$fahrenheit = $this->_celsiumToFahrenheit(23);
Ну или флаг нужно взвести общий для нескольких методов. Когда свойство используется как глобальная переменная в "обычном" программировании, но в рамках класса (прелесть инкапсуляции).
Тогда пишешь:
$this->importantFlag = 1;
AllesKlar
26.12.2015 - 21:54
Цитата (konstantin1985 @ 26.12.2015 - 19:40) |
Это для объектов, а внутри класса? |
Что ты подразумиваешь под "внутри класса"?
Класс - это тип. Такой же, как и String или Integer, но описанный особым образом.
И когда ты пишешь $a = new MyClass; Это ничто иное, как создание переменной $a типа MyClass, которая будет наделена всеми свойствами типа MyClass.
Для простоты восприятия это все обозвали Классами и Объектами.
В настоящих Объекто Ориентированных языках, тебе ничто не помешает сделать
a = new Integer(5);
b = new Integer(1)
a.add(b); //a.toString() == 6
_____________
[продано копирайтерам]
konstantin1985
26.12.2015 - 22:24
class Core_Entity extends Core_ORM
{
@var
protected $_tagName = NULL;
@param @return
public function setXmlTagName($tagName)
{
$this->_tagName = strval($tagName);
return $this;
Прошу еще разъяснений , в коде выше свойству _tagname присваивается приведенное к строке значение, а что означает тогда return $this?
Цитата (konstantin1985 @ 26.12.2015 - 22:24) |
что означает тогда return $this? |
Метод возвращает ссылку на текущий объект.
https://ru.wikipedia.org/wiki/Fluent_interface
_____________
Она утонула
СМИ независимы
У нас нет дворцов
В мешках был сахар
Сердюков не виноват
Я не знаю свою зарплату
Правду, я говорю правду
Я не знаю зарплату Сечина
Наших войск в Украине нет
Ахмат Кадыров - герой России
Санкции нам только на пользу
Мы будем стоять за спинами детей
Я 15 лет недоволен ценами на бензин
От падения рубля доходы России только увеличились
ПРОШУ ВАС ОТНЕСТИСЬ К ЭТОМУ С ПОНИМАНИЕМ
AllesKlar
27.12.2015 - 01:23
Цитата (konstantin1985 @ 26.12.2015 - 20:24) |
Прошу еще разъяснений , в коде выше свойству _tagname присваивается приведенное к строке значение, а что означает тогда return $this? |
Это такая "фишка", чтобы можно было сделать такой вот финт:
$a = new Core_Entity;
$a->setXmlTagName($tagName)->NextMethod();
$a->setXmlTagName($tagName) - вернул нам уже обновленный объект $a и мы можем прямо там же вызывать следующий метод.
Если бы в setXmlTagName не было return $this, то пришлось бы двумя вызовами деать тоже самое:
$a = new Core_Entity;
$a->setXmlTagName($tagName);
$a->NextMethod();
_____________
[продано копирайтерам]
konstantin1985
29.12.2015 - 00:00
Как объяснить применение $this в качестве аргумента массива?
class Core_Entity extends Core_ORM
protected $_primaryKey = 'id';
protected $_modelColumns = array();
public function getPrimaryKey()
{
return $this->_modelColumns[$this->_primaryKey];
}
как то так начало, но скорее всего ошибаюсь:
a = new Core_Entity;
a->getPrimaryKey (_modelColumns......)
Игорь_Vasinsky
29.12.2015 - 06:48
Цитата |
public function getPrimaryKey() { return $this->_modelColumns[$this->_primaryKey]; } |
вот так
Цитата |
protected $_primaryKey = 'id'; |
как так
Цитата |
a->getPrimaryKey (_modelColumns......) |
метод getPrimaryKey() не принимает аргументов
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Цитата (konstantin1985 @ 29.12.2015 - 00:00) |
Как объяснить применение $this в качестве аргумента массива? |
Какого аргумента массива? У массивов нет никаких аргументов.
konstantin1985, ты не рано за ООП принялся? =)
Объясните пжл , что выводит эта строчка

:
return $this->_modelColumns[$this->_primaryKey];
kristall
29.12.2015 - 11:54
$modelColumns = ['id' => '666', 'name' => 'Vasya', 'surname' => 'Pupkin', 'birthdate' => '1939'];
$key = 'id';
...
return $modelColumns[$key];
Вернет '666'.
А у тебя:
protected $_primaryKey = 'id';
protected $_modelColumns = array();
public function getPrimaryKey()
{
return $this->_modelColumns[$this->_primaryKey];
}
В $_modelColumns хранится какой-то массив, по-видимому, ассоциативный с одним кортежем, полученным где-то выше из БД, а в $_primaryKey -- строка 'id', которая будет использоваться в качестве ключа ассоциативного массива.
В таком виде вернет элемент массива $_modelColumns['id'];
_____________
echo '<pre>',print_r($var, 1);die;
root@server# make love && war
Цитата (AllesKlar @ 26.12.2015 - 21:54) |
В настоящих Объекто Ориентированных языках, тебе ничто не помешает сделать |
Перичисли что это за языки такие "настоящие"? По-моему в этот список кроме JS ничего не входит. Может быть Java еще, не знаком.