PHP.SU

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


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

> Без описания
Sanek_OS9
Отправлено: 08 Мая, 2017 - 13:04:02
Post Id



Гость


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


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




Помогите разобраться с переменной $this в классе а именно почему если в методе явно указать свойство то возникнет ошибка а если просто указать $this то все будет работать как нужно.
PHP:
скопировать код в буфер обмена
  1. class A{
  2.     public function __construct($a) {
  3.         $this->a = $a;
  4.     }
  5. }
  6. class B{
  7.     public function setA($flag = false){
  8.         $this->a = $flag;
  9.         return $this;
  10.     }
  11.     public function create(){
  12.         return new A($this->a);
  13.     }
  14. }
  15. $b = new B();
  16. $a = $b->setA(true)->create();
  17.  

В таком варианте метода возникнет ошибка
PHP:
скопировать код в буфер обмена
  1.     public function setA($flag = false){
  2.         $this->a = $flag;
  3.         return $this->a;
  4.     }
  5.  
 
 Top
caballero
Отправлено: 08 Мая, 2017 - 13:46:20
Post Id


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


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


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




вообще то поля класса
в данном случае $a полагается обьявлять.

Если уж написали быдлокод то хотя бы укажите какая именно ошибка возникает.

Я термин "неявный" тут вообще не лепится.


-----
Open Source учетная система http://zippy[dot]com[dot]ua/
 
 Top
OrmaJever Модератор
Отправлено: 08 Мая, 2017 - 15:27:25
Post Id



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


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


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




ошибка того что вы возвращаете из метода булевое значение
Sanek_OS9 пишет:
return $this->a;

а потом обращаетесь к нему как к обьекту?
Sanek_OS9 пишет:
$a = $b->setA(true)->create();

даже не знаю почему это


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Sanek_OS9
Отправлено: 08 Мая, 2017 - 16:56:19
Post Id



Гость


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


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




caballero пишет:
вообще то поля класса
в данном случае $a полагается обьявлять.

Если уж написали быдлокод то хотя бы укажите какая именно ошибка возникает.

Я термин "неявный" тут вообще не лепится.

О великий "гуру" идите вы куда по дальше и не бесите участников.
(Добавление)
OrmaJever пишет:
ошибка того что вы возвращаете из метода булевое значение
Sanek_OS9 пишет:
return $this->a;

а потом обращаетесь к нему как к обьекту?
Sanek_OS9 пишет:
$a = $b->setA(true)->create();

даже не знаю почему это

Ошибка кстати Fatal error: Call to a member function create() on a non-object in W:\domains\zadanie.ru\class.php on line 24
Я этот код с видеоурока взял, и он как оказывается даже не работает) то что там оговаривалось должно выглядеть так:
PHP:
скопировать код в буфер обмена
  1. class B{
  2.     public $a = false;
  3.     public $b = true;
  4.     public function setA($flag){
  5.         $this->a = $flag;
  6.         return $this;
  7.     }
  8.     public function setB($flag){
  9.         $this->b = $flag;
  10.         return $this;
  11.     }
  12.     public function create(){
  13.         return new A($this->a, $this->b);
  14.     }
  15. }
  16.  

Выполняет то о чем шла речь но хотелось бы знать почему нельзя вернуть $this->a например вместо $this ведь для этого я и учу язык что бы понимать как все работает а не что бы написать что то лишь бы оно работало не понимая почему.

(Отредактировано автором: 08 Мая, 2017 - 17:08:04)

 
 Top
caballero
Отправлено: 08 Мая, 2017 - 17:24:45
Post Id


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


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


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




Цитата:
О великий "гуру" идите вы куда по дальше и не бесите участников.

если тебя бесит что тебе указывают на ошибки зачем вообще тут писать?
Цитата:
хотелось бы знать почему нельзя вернуть $this->a например вместо $this ведь для этого я и учу язык что бы понимать как все работает

так читай ответы а не умничай

кто сказал что его нельзя вернуть?
руским языком написали что ты возвращает булево значения а обращаешся к нему как обьекту

и в ошибке так написано черным по белому если бы удосужился прочитать
Call to a member function create() on a non-object

Уверен что тебе с таким подходом вообще стоит заниматся програмированием?

Тем более что за 5 лет с момента регистрации (а значит минимум пять лет изучения) до сих пор не понимаешь разницы между обьектом и скалярным значением

(Отредактировано автором: 08 Мая, 2017 - 17:27:30)



-----
Open Source учетная система http://zippy[dot]com[dot]ua/
 
 Top
Sanek_OS9
Отправлено: 08 Мая, 2017 - 17:35:25
Post Id



Гость


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


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




caballero пишет:
Цитата:
О великий "гуру" идите вы куда по дальше и не бесите участников.

если тебя бесит что тебе указывают на ошибки зачем вообще тут писать?
Цитата:
хотелось бы знать почему нельзя вернуть $this->a например вместо $this ведь для этого я и учу язык что бы понимать как все работает

так читай ответы а не умничай

кто сказал что его нельзя вернуть?
руским языком написали что ты возвращает булево значения а обращаешся к нему как обьекту

и в ошибке так написано черным по белому если бы удосужился прочитать
Call to a member function create() on a non-object

Уверен что тебе с таким подходом вообще стоит заниматся програмированием?

Тем более что за 5 лет с момента регистрации (а значит минимум пять лет изучения) до сих пор не понимаешь разницы между обьектом и скалярным значением

Где я обращаюсь к булеву значению как к объекту?
 
 Top
andrewkard
Отправлено: 08 Мая, 2017 - 18:08:27
Post Id


Участник


Покинул форум
Сообщений всего: 1058
Дата рег-ции: Нояб. 2014  


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




Sanek_OS9 пишет:
Где я обращаюсь к булеву значению как к объекту?

тут:
$b->setA(true)->create();
если метод setA вернет булево значение, то вызов метода create завершится ошибкой, поскольку $b->setA(true) уже не является объектом
 
 Top
Sanek_OS9
Отправлено: 08 Мая, 2017 - 18:12:21
Post Id



Гость


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


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




andrewkard пишет:
Sanek_OS9 пишет:
Где я обращаюсь к булеву значению как к объекту?

тут:
$b->setA(true)->create();
если метод setA вернет булево значение, то вызов метода create завершится ошибкой, поскольку $b->setA(true) уже не является объектом

Спасибо, простой, понятный и адекватный ответ, не то что у некоторых....
Я обычно методы так не вызывал $b->setA(true)->create(); один за другим потому запутался.
 
 Top
Анатолий Степанов
Отправлено: 08 Мая, 2017 - 19:32:36
Post Id



Новичок


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


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




Цитата:
Дата рег-ции: Окт. 2012

Sanek_OS9 пишет:
О великий "гуру" идите вы куда по дальше и не бесите участников.

Пхахахаххаа, за 5 лет так и ничему не научился, кроме как грубить нормальным людям, которые явно по делу говорят Ха-ха
 
 Top
OrmaJever Модератор
Отправлено: 08 Мая, 2017 - 22:26:55
Post Id



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


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


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




Sanek_OS9 пишет:
Я этот код с видеоурока взял

зачем брать код который вы даже не понимаете как работает и почему. Если бы он отработал правильно, а я так понимаю что он и отработал правильно, то что вам это дало? Что вы поняли из этого? Ничего, вот именно. Поэтому лучше написать 3 строчки но которые вы сами понимаете что они делают, чем 10 строк из урока непонятно каких


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Sanek_OS9
Отправлено: 08 Мая, 2017 - 23:39:43
Post Id



Гость


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


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




OrmaJever пишет:
Sanek_OS9 пишет:
Я этот код с видеоурока взял

зачем брать код который вы даже не понимаете как работает и почему. Если бы он отработал правильно, а я так понимаю что он и отработал правильно, то что вам это дало? Что вы поняли из этого? Ничего, вот именно. Поэтому лучше написать 3 строчки но которые вы сами понимаете что они делают, чем 10 строк из урока непонятно каких

мне это дало что я понял зачем его приводил автор в пример и возможно я буду из этого что то использовать.
Набросились на меня и спросить уже ничего нельзя) если спрашиваю значит оно мне надо.
Все тема закрыта.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Объектно-ориентированное программирование »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB