Можем ли мы использовать $this
вне класса. Пожалуйста, посмотрите пример ниже,
<?php
class Animal {
public function whichClass() {
echo "I am an Animal!";
}
public function sayClassName() {
$this->whichClass();
}
}
class Tiger extends Animal {
public function whichClass() {
echo "I am a Tiger!";
}
public function anotherClass() {
echo "I am a another Tiger!";
}
}
$tigerObj = new Tiger();
//Tiger::whichClass();
$this->anotherClass();
Здесь я создал новый объект $tigerObj = new Tiger();
после этого я пытался использовать $this
но это бросало ошибку. Так можно ли использовать $this
извне класса? Если нет, $this
относится к текущему объекту. Так почему бы нам не использовать это?
Невозможно использовать $ this таким образом, вы можете создать объект этого класса, а затем расширить методы, которые вы хотите вызвать. Смотри ниже...
class Animal {
public function whichClass() {
echo "I am an Animal!";
}
public function sayClassName() {
$this->whichClass();
}
}
class Tiger extends Animal {
public function whichClass() {
echo "I am a Tiger!";
}
public function anotherClass() {
echo "I am a another Tiger!";
}
}
$tigerObj = new Tiger();
echo $tigerObj->anotherClass();
Вы получите результат: "Я еще один тигр!"
НЕТ, вы не можете использовать $ this вне сферы действия класса
пример:
1 $this=new \DateTime();
2 echo $this->format('r');
генерирует следующую ошибку:
Fatal error: Cannot re-assign $this on line 2
$ невозможно использовать внешний класс, поэтому вы можете сделать статический метод и использовать этот Tiger :: anotherClass. Ссылка на doc
class Animal {
public function whichClass() {
echo "I am an Animal!";
}
public function sayClassName() {
$this->whichClass();
}
}
class Tiger extends Animal {
public function whichClass() {
echo "I am a Tiger!";
}
public static function anotherClass() {
echo "I am a another Tiger!";
}
}
$tigerObj = new Tiger();
//Tiger::whichClass();
Tiger::anotherClass();
$tigerObj->anotherClass()
используйте$tigerObj->anotherClass()
$this
вне класса.