# КоханийВолодимир (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. Это доказывает, что все методы являются статичными, не важно как они объявлены
# 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 строку, где и инициализируется класс и сразу же вызывается его метод.