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 :: Версия для печати :: Fatal error: Cannot access empty property in
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Fatal error: Cannot access empty property in

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

1. 8_Кирюха_8 - 14 Января, 2017 - 03:14:12 - перейти к сообщению
Изучаю курс на ютубе. У препода, вроде, всё так же и работает. А у меня свойства в массив не передаются
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class nameExc extends Exception {
  3.         function __construct($msg){
  4.                 $msg.= " name!";
  5.                 parent::__construct($msg);
  6.         }
  7. }
  8.  
  9. class loginExc extends Exception {
  10.         function __construct($msg){
  11.                 $msg.=" login";
  12.                 parent::__construct($msg);
  13.         }
  14. }
  15.  
  16. class passExc extends Exception {
  17.         function __construct($msg){
  18.                 $msg.=" password";
  19.                 parent::__construct($msg);
  20.         }
  21. }
  22.  
  23. abstract class AUser{
  24.                
  25.         abstract function showInfo();
  26. }
  27.  
  28. class User extends AUser{
  29.        
  30.         const INFO_TITLE="Данные пользователя: ";
  31.        
  32.         public $name;
  33.         public $login;
  34.         public $pass;
  35.        
  36.         function __construct($n="",$l="",$p=""){
  37.                 try{
  38.                         if($n==""){
  39.                                
  40.                                 throw new nameExc ("Введите:");
  41.                         }
  42.                         $this->name=$n;
  43.                         if($l==""){
  44.                                 throw new loginExc("Введите:");
  45.                         }
  46.                         $this->login=$l;
  47.                         if($p==""){
  48.                                 throw new passExc("Введите:");
  49.                         }
  50.                         $this->pass=$p;
  51.                        
  52.                 }catch(nameExc $e){
  53.                                 echo $e->getMessage();
  54.                 }catch(loginExc $e){
  55.                         echo $e->getMessage();
  56.                 }catch(passExc $e){
  57.                         echo $e->getMessage();
  58.                 }
  59.         }      
  60.                
  61.         function __clone(){
  62.                 $this->name="Guest";
  63.                 $this->login="quest";
  64.                 $this->pass="qwery";
  65.         }
  66.        
  67.  
  68.         function showInfo(){
  69.                 echo "<p>Name : ".$this->name."<br>";
  70.                 echo "Login : ".$this->login."<br>";
  71.                 echo "Password : ".$this->pass."<br>";
  72.         }
  73.        
  74.         function showTitle(){
  75.                 echo "<h3>".self::INFO_TITLE."<h3>";
  76.         }
  77.  
  78. }
  79.  
  80. interface ISuperUser{
  81.         function getInfo();
  82. }
  83.  
  84. class SuperUser extends User implements ISuperUser {
  85.         public $role;
  86.         function __construct($n,$l,$p,$r){
  87.                 parent::__construct($n,$l,$p);
  88.                 $this->role=$r;
  89.         }
  90.         function showInfo(){
  91.                 parent::showInfo();
  92.                 echo "Role : ".$this->role."<br>";
  93.         }
  94.         function getInfo(){
  95.                 $arr= array();
  96.                 foreach($this as $k->$v){
  97.                         $arr[$k] = $v;
  98.                 }
  99.                 return $arr;
  100.         }
  101. }
  102.  
  103. $user1= new User("Vasya","V","password");
  104.         $user1->showTitle();
  105.         $user1->showInfo();
  106.        
  107. $user2= new User("Petya","P","1234");
  108.         $user2->showTitle();
  109.         $user2->showInfo();
  110.        
  111. $user3= new User("Sasha","S","63445sgf");
  112.         $user3->showTitle();
  113.         $user3->showInfo();
  114.  
  115. $user4 = clone $user1;
  116.         $user4->showTitle();
  117.         $user4->showInfo();
  118.        
  119. $user5 = new superUser("Dasha","D","3213444","admin");
  120.         $user5->role="admin";
  121.         $user5->showTitle();
  122.         $user5->showInfo();
  123. print_r($user5->getInfo());    
  124.        
  125. ?>

Ругается на метод getInfo. как я понимаю
2. Sail - 16 Января, 2017 - 08:21:25 - перейти к сообщению
8_Кирюха_8, повнимательнее с конструкцией foreach().
3. 8_Кирюха_8 - 17 Января, 2017 - 00:15:50 - перейти к сообщению
Sailповнимательней - это foreach не может перебрать свойства класса, или синтаксис неправильный? Не бей сильно, учусь только...
4. Строитель - 17 Января, 2017 - 00:21:05 - перейти к сообщению
8_Кирюха_8, синтаксис
PHP:
скопировать код в буфер обмена
  1. foreach($this as $k => $v){
  2.     $arr[$k] = $v;
  3. }
5. 8_Кирюха_8 - 17 Января, 2017 - 00:38:27 - перейти к сообщению
Sail, прости дурака, разобрался. Совсем запутался с ооп)))
(Добавление)
Строитель, ага. В сотый раз просматривая код, я наконец понял. Спасибо

 

Powered by ExBB FM 1.0 RC1