如何在课外使用 $this?
Posted
技术标签:
【中文标题】如何在课外使用 $this?【英文标题】:How to use $this in outside of class? 【发布时间】:2015-01-19 13:09:59 【问题描述】:我们可以在课堂外使用$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
指的是当前对象。那么我们为什么不使用它呢?
【问题讨论】:
改用$tigerObj->anotherClass()
如果在你尝试使用$this
之后它抛出一个错误,那么这绝对意味着你不能在课堂外使用$this,无论你问了多少问题或您提供的示例-您做不到。时期。这样做是有原因的,这样做也是零意义的。
"$this
指的是当前对象"——是的,但不是你似乎在考虑它。这不是“我上次使用的对象”,而是“调用此方法的对象”。所以如果你不在成员函数的范围内,你就没有$this
。在您的示例中,您处于全局范围内,因此没有可用的对象。 (实际上,$this 是一种魔术变量,它提供指向单个对象的成员变量的指针——在对象范围之外引用它是没有意义的。)
你想达到什么目的?你所要求的根本没有任何意义。 $this
始终指向它所使用的类的当前 instance
。所以要从外面引用你班级的instance
,你有你的tigerObj
这样做。
啊哈——看起来 Magento 模板做了一些令人困惑的事情。模板文件包含在类的成员函数中。请参阅***.com/questions/9239269/… nicksays.co.uk/magento-this — 基本上,因为模板文件是从 Magento 的块对象的方法中包含的,所以 $this
可供它们使用,并指代执行包含的块对象。
【参考方案1】:
$this 不可能在类外使用,所以你可以创建静态方法,像这样使用 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();
【讨论】:
感谢您的回复。【参考方案2】:不能以这种方式使用 $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();
你会得到结果“我是另一只老虎!”
【讨论】:
【参考方案3】:不,您不能在类范围之外使用 $this
例子:
1 $this=new \DateTime();
2 echo $this->format('r');
产生以下错误:
Fatal error: Cannot re-assign $this on line 2
【讨论】:
【参考方案4】:是的,可以在 php 8 中使用 $this
外部类。
示例:class.php
<?php
class MyClass
private $say = '';
public function say(string $text)
$this->say = $text;
public function hear()
require __DIR__ . '/test.php';
echo $this->say;
$MyClass = new MyClass();
$MyClass->hear();
?>
test.php
<?php
$this->say('Using this Outside Class Is Possible');
?>
【讨论】:
以上是关于如何在课外使用 $this?的主要内容,如果未能解决你的问题,请参考以下文章