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
Форумы портала PHP.SU :: Версия для печати :: Ошибка при явном указании свойства
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Ошибка при явном указании свойства

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

1. Sanek_OS9 - 08 Мая, 2017 - 13:04:02 - перейти к сообщению
Помогите разобраться с переменной $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.  
2. caballero - 08 Мая, 2017 - 13:46:20 - перейти к сообщению
вообще то поля класса
в данном случае $a полагается обьявлять.

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

Я термин "неявный" тут вообще не лепится.
3. OrmaJever - 08 Мая, 2017 - 15:27:25 - перейти к сообщению
ошибка того что вы возвращаете из метода булевое значение
Sanek_OS9 пишет:
return $this->a;

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

даже не знаю почему это
4. Sanek_OS9 - 08 Мая, 2017 - 16:56:19 - перейти к сообщению
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 ведь для этого я и учу язык что бы понимать как все работает а не что бы написать что то лишь бы оно работало не понимая почему.
5. caballero - 08 Мая, 2017 - 17:24:45 - перейти к сообщению
Цитата:
О великий "гуру" идите вы куда по дальше и не бесите участников.

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

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

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

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

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

Тем более что за 5 лет с момента регистрации (а значит минимум пять лет изучения) до сих пор не понимаешь разницы между обьектом и скалярным значением
6. Sanek_OS9 - 08 Мая, 2017 - 17:35:25 - перейти к сообщению
caballero пишет:
Цитата:
О великий "гуру" идите вы куда по дальше и не бесите участников.

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

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

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

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

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

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

Где я обращаюсь к булеву значению как к объекту?
7. andrewkard - 08 Мая, 2017 - 18:08:27 - перейти к сообщению
Sanek_OS9 пишет:
Где я обращаюсь к булеву значению как к объекту?

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

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

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

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

Пхахахаххаа, за 5 лет так и ничему не научился, кроме как грубить нормальным людям, которые явно по делу говорят Ха-ха
10. OrmaJever - 08 Мая, 2017 - 22:26:55 - перейти к сообщению
Sanek_OS9 пишет:
Я этот код с видеоурока взял

зачем брать код который вы даже не понимаете как работает и почему. Если бы он отработал правильно, а я так понимаю что он и отработал правильно, то что вам это дало? Что вы поняли из этого? Ничего, вот именно. Поэтому лучше написать 3 строчки но которые вы сами понимаете что они делают, чем 10 строк из урока непонятно каких
11. Sanek_OS9 - 08 Мая, 2017 - 23:39:43 - перейти к сообщению
OrmaJever пишет:
Sanek_OS9 пишет:
Я этот код с видеоурока взял

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

мне это дало что я понял зачем его приводил автор в пример и возможно я буду из этого что то использовать.
Набросились на меня и спросить уже ничего нельзя) если спрашиваю значит оно мне надо.
Все тема закрыта.

 

Powered by ExBB FM 1.0 RC1