Разбор ООП с Delphinum

12.71K
.
# КоханийВолодимир (28.01.2017 / 19:00)
То есть когда я вызываю через статик то я тяну всю информацию с класса, а когда через экземпляр класса, то конкретно тот метод шо мне надо?
Объясню на примере:
class MyClass{
  public $a;

  public function getA(){
    return $this->a;
  }
}

$obj = new MyClass;
$obj->a = 'hello';
echo $obj->getA(); // В методе getA доступна переменная $this->a
echo MyClass::getA(); // При таком вызове в метода getA переменная $this->a недоступна, и это приведет к ошибке вызова
.
Другой пример:
class MyClass{
  public static $a;

  public function getA(){
    return self::$a;
  }
}

echo MyClass::getA(); // В методе getA доступна переменная self::$a


Обрати внимание, что метод getA можно вызвать как статичный даже если он не объявлен static. Это доказывает, что все методы являются статичными, не важно как они объявлены
.
Jahak
# Delphinum (28.01.2017 / 19:04)
...
Обрати внимание, что метод getA можно вызвать как статичный даже если он не объявлен static. Это доказывает, что все методы являются статичными, не важно как они объявлены

______________________

В PHP 7, возможность вызова нестатического метода статически объявлена устаревшей и вызовет ошибку уровня E_DEPRECATED и в дальнейшем может быть удалена.


Так-что лучше о такой возможности лучше не знать никогда, это не есть хорошо)
.
Jahak, это верно, но тут важно понять разницу между вызовом метода от имени класса и от имени объекта. Отсюда уже проще сделать вывод, что наличие классов с одними только статичными методами довольно подозрительное решение
.
# КоханийВолодимир (28.01.2017 / 18:48)
Я сказал что всегда в моделях все методы делаю статическими, мне так проще их использовать в контроллерах
А в чем простота использования по сравнению с нестатичными методами?
.
КоханийВолодимир
# Delphinum (28.01.2017 / 19:19)
А в чем простота использования по сравнению с нестатичными методами?
Не создаю екземпляр, меньше кода)
.
КоханийВолодимир, но ты же создаешь класс, а значит кода больше по сравнению с тем, чтобы не создавать класс вообще, а использовать функции )
.
# КоханийВолодимир (28.01.2017 / 19:25)
Не создаю екземпляр, меньше кода)
Я не уверен, правильно ли это, но видел и такую экономную запись
class MyClass{
    public $a = 'hello';

    public function getA(){
        return $this->a;
    }
}
 
echo (new MyClass)->getA();
.
ДоХтор, работать будет, только нужно понять, зачем нужна такая экономия и не лучше ли вообще отказаться от ООП
.
╭∩╮ (`-`) ╭∩╮
# Delphinum (28.01.2017 / 20:02)
ДоХтор, работать будет, только нужно понять, зачем нужна такая экономия и не лучше ли вообще отказаться от ООП
Может он имел в виду 9 строку, где и инициализируется класс и сразу же вызывается его метод.
Всего: 713