Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: смысл $this

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: подскажите пожалуйста где почитать чтоб разобраться
qaz1qwe
Отправлено: 07 Сентября, 2012 - 20:49:18
Post Id



Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Сент. 2012  
Откуда: Kiev, Ukraine


Помог: 0 раз(а)




Доброе время суток!
Начал изучать РНР - очень хочется научиться!
Дошел до ООП
и возникли трудности((
например вот есть файл class.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. class Stroki {
  4.  
  5.     var $cena;
  6.     var $status;
  7.  
  8.     function hello () {
  9.         return 'Hello! '.$this->cena; // допустим хотим использовать переменную
  10.         // в этой функции!
  11.     }
  12.    
  13.     function privet () {
  14.         return 'Привет!';
  15.     }
  16.    
  17.     function set_cena ($cn) { // введем функцию к-я устанавливает цену
  18.         $this->cena = $cn; // эта конструкция дает доступ к переменным и
  19.         // функциям внутри класса
  20.     }
  21.    
  22.     function set_all ($cn, $status) { // функция к-я устанавливает цену и статус
  23.         $this->set_cena($cn); // здесь вызываем метод(функцию)
  24.         $this->status = $status; // а здесь вызываем свойство(переменную)
  25.        
  26.     }
  27.  
  28. }
  29.  
  30. ?>


подскажите как вывести в файле index.php функцию set_all ?
где можно почитать про $this как для ребенка?
зараннее благодарен всем кто поможет, извините если вопрос совсем бестолковый...


Отредактировано модератором: OrmaJever, 07 Сентября, 2012 - 21:30:32
 
 Top
Данил_123
Отправлено: 07 Сентября, 2012 - 21:16:04
Post Id


Участник


Покинул форум
Сообщений всего: 1026
Дата рег-ции: Июнь 2011  
Откуда: rostov


Помог: 9 раз(а)




$this это указатель на объект, а ООП я начинал изучать читая все тут


-----
http://mysitecost.ru
 
 Top
OrmaJever Модератор
Отправлено: 07 Сентября, 2012 - 21:37:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




qaz1qwe пишет:
подскажите как вывести в файле index.php функцию set_all ?

Вначале нужно подключить файл с классом, затем создать обьект и затем вызвать нужный метод.
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. require './class.php';
  3.  
  4. $obj = new Stroki(); // создаём обьект
  5. $obj->set_all(10, 'done'); // вызываем нужный метод.
  6. ?>

$this это указатель на обьект но как для новичка представьте что так нужно обращатся к переменым и функциям внутри класса. Например:
PHP:
скопировать код в буфер обмена
  1. class A {
  2.         public function call() {
  3.                 echo $this->myFunct(); // вызывает метод класса
  4.                 echo myFunct();        // вызывает обысную функцию.
  5.         }
  6.         public function myFunct() {
  7.                 return 'class method<br>';
  8.         }
  9. }
  10.  
  11. function myFunct() {
  12.         return 'just function<br>';
  13. }
  14.  
  15. $obj = new A();
  16. $obj->call();

НО $this можно использовать только в рамках класса, за пределами это просто простая переменая.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
qaz1qwe
Отправлено: 08 Сентября, 2012 - 00:07:15
Post Id



Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Сент. 2012  
Откуда: Kiev, Ukraine


Помог: 0 раз(а)




OrmaJever спасибо за разъяснения!
однако я не могу все равно вывести значения! все функции вывожу а эту почему-то нет((

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3.     require_once ('stroki.class.php');
  4.  
  5.     $c = new Stroki ();
  6.     $c->set_cena(25); // зададим цену не прямым установлением переменной, а
  7.     // вызовом метода
  8.    
  9.     $d = new Stroki ();
  10.     $d->cena = 35;
  11.    
  12.     echo "C = ".$c->cena."<br>"; // выводим 25
  13.     echo "D = ".$d->cena."<br>";
  14.    
  15.     echo $c->hello(); // выводим значение функции hello
  16.    
  17.     echo $c->set_all(10, 'done'); // вызываем нужный метод.
  18.    
  19.    
  20. ?>


Отредактировано модератором: OrmaJever, 08 Сентября, 2012 - 00:09:59
 
 Top
OrmaJever Модератор
Отправлено: 08 Сентября, 2012 - 00:11:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Во-первых какую "эту функцию"?
Во-вторых что вы хотите добится этим кодом? Синтаксически у вас всё правельно, а больше я не могу ничего сказать т.к. я не могу понять логику скрипта. И зачем создаёте два обьекта?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
qaz1qwe
Отправлено: 08 Сентября, 2012 - 00:16:46
Post Id



Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Сент. 2012  
Откуда: Kiev, Ukraine


Помог: 0 раз(а)




я же просто учусь)) и в одном горожу все подряд) но вот эта строка мне в браузере ничего не показывает((

(Отредактировано автором: 08 Сентября, 2012 - 00:29:13)

 
 Top
caballero
Отправлено: 08 Сентября, 2012 - 00:30:11
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




а с чего ты решил что она должна что то показывать?


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Anohsa
Отправлено: 08 Сентября, 2012 - 00:52:38
Post Id


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Авг. 2012  


Помог: 0 раз(а)




по идеи да.. ничего не должна показывать...

может я путаю с С++, но разве в PHP последняя строка в функции не является return, то есть получается return $this->status = $status;, ну соответственно должно вернуть done и вывести.

Хотя если не выводит, значит нет. =))))
 
 Top
qaz1qwe
Отправлено: 08 Сентября, 2012 - 01:00:36
Post Id



Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Сент. 2012  
Откуда: Kiev, Ukraine


Помог: 0 раз(а)




caballero доброй ночи! извини, я совсем теперь запутался. я скачал видеоуроки РНР
и дошел до ООП. автор в уроке обьясняет суть переменной $this
я повторяюю за ним:
index.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3.     require_once ('stroki.class.php');
  4.  
  5.     $c = new Stroki ();
  6.  
  7.     $c->set_cena(25); // зададим цену не прямым установлением переменной, а
  8.     // вызовом метода
  9.  
  10.     $d = new Stroki ();
  11.     $d->cena = 35;
  12.  
  13.     echo "C = ".$c->cena."<br>"; // выводим 25
  14.  
  15.     echo "D = ".$d->cena."<br>";
  16.  
  17.     echo $c->hello(); // выводим значение функции hello
  18.  
  19.     echo $c->set_all(10, 'done');
  20.  
  21. ?>


stroki.class.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. // описание класса!
  4.  
  5. class Stroki {
  6.  
  7.     var $cena;
  8.     var $status;
  9.  
  10.     function hello () {
  11.         return 'Hello! '.$this->cena; // допустим хотим использовать переменную
  12.         // в этой функции!
  13.     }
  14.    
  15.     function privet () {
  16.         return 'Привет!';
  17.     }
  18.    
  19.     function set_cena ($cn) { // введем функцию к-я устанавливает цену
  20.         $this->cena = $cn; // эта конструкция дает доступ к переменным и
  21.         // функциям внутри класса
  22.     }
  23.    
  24.     function set_all ($cn, $status) { // функция к-я устанавливает цену и статус
  25.         $this->set_cena($cn); // здесь вызываем метод(функцию)
  26.         $this->status = $status; // а здесь вызываем свойство(переменную)
  27.        
  28.     }
  29.  
  30. }
  31.  
  32. ?>


в конце урока автор обьяснил что можно вот так делать
PHP:
скопировать код в буфер обмена
  1.     function set_all ($cn, $status) { // функция к-я устанавливает цену и статус
  2.         $this->set_cena($cn); // здесь вызываем метод(функцию)
  3.         $this->status = $status; // а здесь вызываем свойство(переменную)



я сам решил посмотреть этой командой

и ничего не вижу. я понимаю что чего то не понимаю, но пока не могу понять чего.. извини за масло масляное)
я просто не могу учить дальше, понимая что не разобрался в самом начале!
 
 Top
caballero
Отправлено: 08 Сентября, 2012 - 01:54:09
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




set_all ничего не возвращает
соответственно echo ничего и не показывает


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
qaz1qwe
Отправлено: 08 Сентября, 2012 - 02:11:23
Post Id



Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Сент. 2012  
Откуда: Kiev, Ukraine


Помог: 0 раз(а)




прошу извинения у всех... но я сейчас в ситуации когда десятерым рассказали анкдот и девять человек смеются а я десятый натянул улыбку...
не могу понять вообще сути этой $this...
зачем автор сказал в конце урока - а можно еще и так
PHP:
скопировать код в буфер обмена
  1.     function set_all ($cn, $status) { // функция к-я устанавливает цену и статус
  2.  
  3.         $this->set_cena($cn); // здесь вызываем метод(функцию)
  4.  
  5.         $this->status = $status; // а здесь вызываем свойство(переменную)


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

ну вызвали переменную вызвали функцию... и ...

(Отредактировано автором: 08 Сентября, 2012 - 02:12:58)

 
 Top
caballero
Отправлено: 08 Сентября, 2012 - 09:35:36
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
не могу понять вообще сути этой $this.

указатель на сам объект, только "изнутри" самого объекта. В примере метод объекта обращается к своим же методам и полям. Без $this этого сделать нельзя. В PHP в отличие от других языков, $this обязателен.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB