Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Использование ключевого слова this
konstantin1985  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 10
Пользователь №: 42313
На форуме: 11 месяцев, 13 дней
Карма:




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

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


При создании объекта его свойство name уже содержит значение.Правилен ли мой вывод и если да, то для чего еще можно использовать this?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3376
Пользователь №: 38635
На форуме: 2 года, 11 месяцев, 12 дней
Карма: 170




$this для обращения к свойствам / методам объекта внутри методов объекта.


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
konstantin1985  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 10
Пользователь №: 42313
На форуме: 11 месяцев, 13 дней
Карма:




Это для объектов, а внутри класса?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ron  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1047
Пользователь №: 41686
На форуме: 1 год, 4 месяца
Карма: 13




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

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

Тогда пишешь:
$this->importantFlag = 1;


--------------------
Жду 5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3376
Пользователь №: 38635
На форуме: 2 года, 11 месяцев, 12 дней
Карма: 170




Цитата (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


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
konstantin1985  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 10
Пользователь №: 42313
На форуме: 11 месяцев, 13 дней
Карма:




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?

Это сообщение отредактировал konstantin1985 - 26.12.2015 - 22:41
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Loki  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 19
Пользователь №: 42297
На форуме: 11 месяцев, 16 дней
Карма: -2




Цитата (konstantin1985 @ 26.12.2015 - 22:24)
что означает тогда return $this?

Метод возвращает ссылку на текущий объект.
https://ru.wikipedia.org/wiki/Fluent_interface
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3376
Пользователь №: 38635
На форуме: 2 года, 11 месяцев, 12 дней
Карма: 170




Цитата (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();


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
konstantin1985  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 10
Пользователь №: 42313
На форуме: 11 месяцев, 13 дней
Карма:




Как объяснить применение $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......)


PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 25994
Пользователь №: 21350
На форуме: 6 лет, 8 месяцев, 25 дней
Карма: 725

Не курю:
1 год, 2 месяца, 11 дней


Цитата
public function getPrimaryKey()
{
  return $this->_modelColumns[$this->_primaryKey];
}


вот так
Цитата
protected $_primaryKey = 'id';



как так
Цитата

a->getPrimaryKey (_modelColumns......)

метод getPrimaryKey() не принимает аргументов


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ron  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1047
Пользователь №: 41686
На форуме: 1 год, 4 месяца
Карма: 13




Цитата (konstantin1985 @ 29.12.2015 - 00:00)
Как объяснить применение $this в качестве аргумента массива?

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

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


--------------------
Жду 5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered











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

return $this->_modelColumns[$this->_primaryKey];
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kristall  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



418 I'm a teapot
******

Профиль
Журнал
Группа: Форумчанин
Завсегдатай форума
Сообщений: 647
Пользователь №: 28374
На форуме: 5 лет, 5 месяцев, 24 дня
Карма: 22





$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
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ron  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1047
Пользователь №: 41686
На форуме: 1 год, 4 месяца
Карма: 13




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

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


--------------------
Жду 5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса