[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Зачем всё таки нужна $this
slox
На,всем здесь, известном ресурсе есть данный код

PHP
<?php
// Создаем новый класс Coor:
class Coor {
// данные (свойства):
var $name;

// методы:
 function Getname() {
 echo $this->name;
 }

 function Setname($name) {
 $this->name = $name;
 }

}

// Создаем объект класса Coor:
$object = new Coor;
// Теперь для изменения имени используем метод Setname():
$object->Setname("Nick");
// А для доступа, как и прежде, Getname():
$object->Getname();
// Сценарий выводит 'Nick'


Вопрос зачем нужна эта $this->
когда и без неё всё получается?? я ВЕРЮ что нужна но пока толком не понимаю зачем?


PHP
class Coor
{
        var $name;
        function Getname($lname)
        {
                echo"<h3>$lname</h3>";

        }
}
$kname="Egor";
$object = new Coor;
$object-> name= "Alex";
echo $object->name;
$object->Getname($kname);
print(
"
        </body>
        </html>
        "
);

выдал
Alex
Egor



Спустя 4 часа, 24 минуты, 38 секунд (23.08.2009 - 02:53) Raito-kun написал(а):
указатель this используется при работе с переменными внутри класса(тоесть ссылается на объект класса). вы замечательно написали класс, функция которого не использует определенную внутри переменную var $name; а теперь попробуйте в вашей функции вывести без указателя "this" - echo $name. увидите, что ничего не получится. а это:

Свернутый текст

PHP
class Coor {
// данные (свойства):
var $name;

// методы:
function Getname() {
echo 
$this->name;
}

function 
Setname($name) {
$this->name $name;
}

}



называется инкапсуляцией(скорее зачатками инкапсуляции). тоесть для переменной $name создают метод, который её определяет, а также который ее выводит. вообще вам нужно познакомиться с базовыми 3мя концепциями ооп - инкапсуляция, полиморфизм, наследование. полная поддержка ооп у РНР, если я не ошибаюсь, появляется только в 6ой версии. вот там, расположив var $name; в секцию "private:" мы оградим и защитим переменную $name от прямого изменения, а ее изменение будет возможно только через спец функцию. таким образом будет правильно реализована инкапсуляция. сейчас переменная $name находится по умолчанию в секции "public:", что не мешает нам изменять ее напрямую. а метод сетнэйм показан, как я понимаю, для ознакомления.

Спустя 5 часов, 8 минут, 55 секунд (23.08.2009 - 08:02) glock18 написал(а):
slox
объяви ее
private $name;

и попробуй выполнить свой код.
а потом тот, который "с непонятно зачем взятым" $this. все поймете, надеюсь.

Спустя 2 часа, 45 минут, 18 секунд (23.08.2009 - 10:47) slox написал(а):
Да начинаю понимать rolleyes.gif
Спасибо, коллеги! wink.gif
Прошу прощения от недостойного за"коллеги"

Спустя 10 минут, 22 секунды (23.08.2009 - 10:57) DenPHP написал(а):
все верно сказано.
но добавлю своё.
Ещё нужно для более читабельного кода, что бы другой программист смотря на код сразу понимал что работают с полем класса.

Спустя 35 минут, 4 секунды (23.08.2009 - 11:33) glock18 написал(а):
Цитата (DenPHP @ 23.08.2009 - 07:57)
Ещё нужно для более читабельного кода, что бы другой программист смотря на код сразу понимал что работают с полем класса.

вообще то внутри класса обращение без $this к членам класса невозможно. есть свойство не читабельного, но рабочего кода.

Спустя 45 минут, 53 секунды (23.08.2009 - 12:18) DenPHP написал(а):
Цитата (glock18 @ 23.08.2009 - 08:33)
Цитата (DenPHP @ 23.08.2009 - 07:57)
Ещё нужно для более читабельного кода, что бы другой программист смотря на код сразу понимал что работают с полем класса.

вообще то внутри класса обращение без $this к членам класса невозможно. есть свойство не читабельного, но рабочего кода.

а извенняюсь...просто с другого языка..думал так же.

Спустя 30 минут, 56 секунд (23.08.2009 - 12:49) stepan написал(а):
для более надежного понимания почитай о ссылках так как $this это тоже самое
Быстрый ответ:

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