Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过$this访问当前类->;来自静态调用的函数。_Php_Oop - Fatal编程技术网

Php 通过$this访问当前类->;来自静态调用的函数。

Php 通过$this访问当前类->;来自静态调用的函数。,php,oop,Php,Oop,这感觉有点混乱,但我希望能够静态调用成员函数,同时让类的其余部分正常运行 例如: <?php class Email { private $username = 'user'; private $password = 'password'; private $from = 'test@example.com'; public $to; public function SendMsg($to, $body) { if

这感觉有点混乱,但我希望能够静态调用成员函数,同时让类的其余部分正常运行

例如:

<?php
class Email
{
    private $username = 'user';
    private $password = 'password';
    private $from     = 'test@example.com';
    public  $to;

    public function SendMsg($to, $body)
    {
        if (isset($this))
            $email &= $this;
        else
            $email = new Email();

        $email->to = $to;

        // Rest of function...
    }
}

Email::SendMsg('mqa@test.com');

如果希望方法是
静态的
,则方法中不能包含
$this
关键字

由于静态方法可以在没有创建对象实例的情况下调用,因此伪变量$this在声明为静态的方法中不可用


取自如果希望方法是
静态的
,则方法中不能包含
$this
关键字

由于静态方法可以在没有创建对象实例的情况下调用,因此伪变量$this在声明为静态的方法中不可用


取自

使
SendMsg成为一个静态函数,创建一个名为$email的私有成员变量,并保存对新创建的电子邮件对象的引用

使SendMsg成为一个静态函数,创建名为$email的私有成员变量,并保存对新创建的电子邮件对象的引用

,因此基本上您希望静态方法成为以下对象的“快捷方式”:

也许:

// class declaration omitted ...    

static public function SendMsg( $to, $body )
{
    $mailobject = new self;

    $mailobject->to = $to;
    $mailobject->body = $body;
    $mailobject->Send();
}

因此,基本上您希望静态方法成为以下各项的“快捷方式”:

也许:

// class declaration omitted ...    

static public function SendMsg( $to, $body )
{
    $mailobject = new self;

    $mailobject->to = $to;
    $mailobject->body = $body;
    $mailobject->Send();
}

有趣的是,它是可用的,但实际上是对调用对象的引用。吓人,是吗?这很有趣,如果我有一个PHP IDE在工作,我会很想测试它,但我不能(我知道你不能在静态方法中访问$this,但我希望在其他情况下也能从类中的其他方法调用该方法…@MQA:这不是我的专长,你尝试过knittl提出的解决方案吗?有趣的是,它是可用的,但实际上是对调用对象的引用。吓人吧这很有趣,如果我有一个PHP IDE在工作的话,我很想测试一下,但是我不能(我知道你不能在静态方法中访问$this,但我想在其他情况下也能从类中的其他方法调用该方法…@MQA:这不是我的专长,你尝试过knittl提出的解决方案吗?确实如此!我不知道为什么我没有想到使用新self。谢谢。确实如此!不知道知道为什么我没有想到使用新的自我。谢谢。