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. Shtorm_sai - 05 Июля, 2018 - 14:53:35 - перейти к сообщению
Доброго всем времени суток. Вроде элементарное, а догнать не могу.
В конструкторе класса присваиваю к свойству массив:

PHP:
скопировать код в буфер обмена
  1.  
  2. $this->param = array('key1' => $val1, 'key2' => $val2, 'key3' => $val2);
  3.  


Далее в методе я добавляю ключи и значения:

PHP:
скопировать код в буфер обмена
  1.  
  2. function method1($data){
  3.  
  4. foreach($data AS $k=>$v){
  5.  
  6. $this->param[$k] = $v;
  7.  
  8. }
  9.                    
  10. $this->send();
  11.  
  12. }
  13.  


В метод send приходят только те значения которые указаны в конструкторе.
В чем моя ошибка?
2. andrewkard - 05 Июля, 2018 - 15:47:08 - перейти к сообщению
Ключи не совпадают? Может ошибка есть где? Вот сэмулировал, все норм:
PHP:
скопировать код в буфер обмена
  1.  
  2. class Test{
  3.     public $params;
  4.  
  5.     function __construct($val1,$val2,$val3){
  6.         $this->params = array('key1' => $val1, 'key2' => $val2, 'key3' => $val2);
  7.     }
  8.  
  9.     function method1($data){
  10.  
  11.         foreach($data AS $k=>$v){
  12.  
  13.             $this->params[$k] = $v;
  14.  
  15.         }
  16.  
  17.         return $this->send();
  18.  
  19.     }
  20.  
  21.     function send(){
  22.         return $this->params;
  23.     }
  24. }
  25.  
  26.  
  27.  
  28. $test = new Test(1,2,3);
  29.  
  30. print_r($test->method1([4,5]));
  31.  


Array
(
[key1] => 1
[key2] => 2
[key3] => 2
[0] => 4
[1] => 5
)
3. Shtorm_sai - 05 Июля, 2018 - 16:15:26 - перейти к сообщению
andrewkard пишет:
Ключи не совпадают? Может ошибка есть где? Вот сэмулировал, все норм:


Сорян, я сам затупил)

У меня идёт вызов метода и следом идёт другой вызов метода.
Вот второй вызов тупо не перезаписывается, использует данные из первого метода.

Т.е. по факту получается следующее:

PHP:
скопировать код в буфер обмена
  1.  
  2. class Test{
  3.     public $params;
  4.  
  5.     function __construct($val1,$val2,$val3){
  6.         $this->params = array('key1' => $val1, 'key2' => $val2, 'key3' => $val2);
  7.     }
  8.  
  9.     function method1(){
  10.  
  11.         return $this->send();
  12.  
  13.     }
  14.  
  15.     function method2($data){
  16.  
  17.         foreach($data AS $k=>$v){
  18.  
  19.             $this->params[$k] = $v;
  20.  
  21.         }
  22.  
  23.         return $this->send();
  24.  
  25.     }
  26.  
  27.     function send(){
  28.         return $this->params;
  29.     }
  30. }
  31.  
  32.  
  33. $test = new Test(1,2,3);
  34.  
  35. print_r($test->method1());
  36. print_r($test->method2([4,5]));
  37.  


method2 вернет значения переданные в конструктор.
Как это вылечить?
4. andrewkard - 05 Июля, 2018 - 16:34:15 - перейти к сообщению
Shtorm_sai пишет:
method2 вернет значения переданные в конструктор.

не только, как и ожидается:
Array
(
[key1] => 1
[key2] => 2
[key3] => 2
[0] => 4
[1] => 5
)
5. Shtorm_sai - 05 Июля, 2018 - 16:56:38 - перейти к сообщению
andrewkard пишет:
Shtorm_sai пишет:
method2 вернет значения переданные в конструктор.

не только, как и ожидается:
Array
(
[key1] => 1
[key2] => 2
[key3] => 2
[0] => 4
[1] => 5
)


Да все верно, разобрался)) Вот я тупняка поймал))) Извините за беспокойство))

Совет новичкам. Не сидите сутками за кодом иначе элементарных вещей не увидите))

 

Powered by ExBB FM 1.0 RC1