[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Использование ключевого слова this
konstantin1985
Читаю мануал на php.net, про создание классов.По моему мнению не очень понятно обяснение использования ключевого слова $this в классе. Например вот этот код, как я понимаю присваивает свойству класса name значение.

class MyDestructableClass {
function __construct() {
print "Конструктор\n";
$this->name = "MyDestructableClass";
}


При создании объекта его свойство name уже содержит значение.Правилен ли мой вывод и если да, то для чего еще можно использовать this?
AllesKlar
$this для обращения к свойствам / методам объекта внутри методов объекта.

_____________
[продано копирайтерам]
konstantin1985
Это для объектов, а внутри класса?
Ron
$this - это указатель на текущий объект. Пишешь в классе вспомогательный приватный метод, который переводит цельсии в градусы. Как к нему обратиться из метода, вызванного пользователем? Вот и пишешь:
$fahrenheit = $this->_celsiumToFahrenheit(23);

Ну или флаг нужно взвести общий для нескольких методов. Когда свойство используется как глобальная переменная в "обычном" программировании, но в рамках класса (прелесть инкапсуляции).

Тогда пишешь:
$this->importantFlag = 1;
AllesKlar
Цитата (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
class Core_Entity extends Core_ORM
{
/**
* Name of the tag in XML
*
@var string
*/

protected $_tagName = NULL;

/**
* Set name of XML node
*
@param string $tagName new tag name for node
*
@return self
*/

public function setXmlTagName($tagName)
{
$this->_tagName = strval($tagName);
return $this;

Прошу еще разъяснений , в коде выше свойству _tagname присваивается приведенное к строке значение, а что означает тогда return $this?
Loki
Цитата (konstantin1985 @ 26.12.2015 - 22:24)
что означает тогда return $this?

Метод возвращает ссылку на текущий объект.
https://ru.wikipedia.org/wiki/Fluent_interface

_____________
Она утонула
СМИ независимы
У нас нет дворцов
В мешках был сахар
Сердюков не виноват
Я не знаю свою зарплату
Правду, я говорю правду
Я не знаю зарплату Сечина
Наших войск в Украине нет
Ахмат Кадыров - герой России
Санкции нам только на пользу
Мы будем стоять за спинами детей
Я 15 лет недоволен ценами на бензин
От падения рубля доходы России только увеличились
ПРОШУ ВАС ОТНЕСТИСЬ К ЭТОМУ С ПОНИМАНИЕМ
AllesKlar
Цитата (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
Как объяснить применение $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
Цитата
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
Ron
Цитата (konstantin1985 @ 29.12.2015 - 00:00)
Как объяснить применение $this в качестве аргумента массива?

Какого аргумента массива? У массивов нет никаких аргументов.

konstantin1985, ты не рано за ООП принялся? =)
Guest


Объясните пжл , что выводит эта строчка unsure.gif :

return $this->_modelColumns[$this->_primaryKey];
kristall

$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
Ron
Цитата (AllesKlar @ 26.12.2015 - 21:54)
В настоящих Объекто Ориентированных языках, тебе ничто не помешает сделать

Перичисли что это за языки такие "настоящие"? По-моему в этот список кроме JS ничего не входит. Может быть Java еще, не знаком.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.