Непонятная ошибка

Вобщем ошибку я нашел, спосибо за подсказки.
непонятна природа возникновения такой ошибки.
вот код:

PHP:
<?php
header('Content-Type: text/html; charset=utf-8');
error_reporting(E_ALL);

class my1 {
    
  public function add() {
    $this->f1 = isset($this->f1) ?  $this->f1+1 : 1;
  }
  
  public function __destruct() {
    if (isset($this->f1)) 
      throw new Exception('переменная иниацилизированна');//тут причина
  }
  
}

class my2 {
  public function __construct() {
    $this->my1 = new my1();
  }
  
  public function printt() {
    $this->my1->add();
    echo @$this->my1->f1;
  }
}


try {
  
  $c = new my2();
  $c->printt();
}
catch (Exception $e) {
  echo $e->getMessage();
}
  
exit;
если логически рассудить то в коде нет ошибок, код отрабатывает как нада, почему вызов генерации исключения выдает ошибку? (прошу сильно непинать, непонятна суть ошибки, код составил специально чтобы показать возникновение моей ошибки)
Ты в деструкторе обращаешься к несуществующему свойству объекта. Ты вообще откуда взял $this->f1, если оно у тебя нигде не объявлено?! ЛОЛ :D
 
В функции add()

$this->f1 = isset($this->f1) ? $this->f1+1 : 1;
проверяем существует ли $this->f1,
если да то +1
если нет то создаем через присвоение значения 1

:ah:
 
В функции add()

$this->f1 = isset($this->f1) ? $this->f1+1 : 1;
проверяем существует ли $this->f1,
если да то +1
если нет то создаем через присвоение значения 1

:ah:
Ты вообще дурак что ли? как ты можешь делать присвоение не объявленному свойству объекта?
 
можно создать пустой класс а переменные иниациализировать на ходу, тобиш свойства необязательно обьявлять, а вот методы нужно обязательно обьявлять.
 
И ругается у тебя скрипт не тут:
PHP:
throw new Exception('переменная иниацилизированна');//тут причина

А тут:
PHP:
try {
  
  $c = new my2();
  $c->printt(); //тут причина
}
catch (Exception $e) {
  echo $e->getMessage();
}

Добавлено через 1 минуту
можно создать пустой класс а переменные иниациализировать на ходу, тобиш свойства необязательно обьявлять, а вот методы нужно обязательно обьявлять.
Ахахахаха)))) Убил))) :D
Ладно Умнов, разбирайся дальше сам в своем гениальном коде, с такими то познаниями в ООП :D
 
Назад
Сверху