如何在课外使用 $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-&gt;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?的主要内容,如果未能解决你的问题,请参考以下文章

课外阅读记录:001

Java课外拓展-----反射与注解

课外阅读课外阅读Read001-Read100

计算机网络组成组件---(学习笔记课外)

以太网络--学习笔记(课外)

Oracle下where子句