如何将一个函数变量用于抽象类中的另一个函数

时间:2017-06-16 06:41:31

标签: php abstract-class

  <a href="#" editable-text="user.name" onshow="convertToUpperCase(user)">{{ user.name || 'empty' }}</a>

这里我在启动功能中有abstract class Dropboxapi { protected $webAuth; protected function abi() { require __DIR__.'/app/Dropbox/autoload.php'; self::start(); self::dropbox_auth(); } public function start() { $webAuth = new Dropbox\WebAuth($appInfo,$appName,'path',$csrfTokenStore); } public function dropbox_auth() { $authUrl = $webAuth->start(); } } Dropboxapi::abi(); 个对象。当我在$webAuth中使用它时会显示dropbox_auth

当我使用Undefined variable: webAuth时,我正在$this->webAuth

我也尝试过self :: webAuth。这显示Using $this when not in object context。所以我不明白如何使用它。

3 个答案:

答案 0 :(得分:0)

你错误地定义了一些东西。抽象类与接口类似,往往被用作“蓝图”类。这意味着它们需要被另一个要扩展的类扩展,并且不能按原样使用。在抽象类中使用$this很好,就像在php.net的抽象文档中那样:http://php.net/manual/en/language.oop5.abstract.php

你需要做的是,让另一个类继承/扩展你的DropBoxApi类,例如:

class DropBoxApi2 extends DropBoxApi
{

}

当继承类DropBoxApi2时,它已经具有它的父(DropBoxApi)的函数和属性。你可以像(例子)一样使用它:

$api = new DropBoxApi2();
$api->start();

此外,您使用的双冒号是静态运算符。这与概念远不同于抽象。

答案 1 :(得分:0)

如果抽象方法被定义为受保护,则必须将函数实现定义为protected或public,而不是private。

许多示例都是there用于抽象类。只需检查你是否可以。如你没有抽象的那样,只需要定义类和函数,如下所示。这里的所有变量和方法都是$ this context。

class Dropboxapi {
    public $this->webAuth='';
    public function abi() {
        require __DIR__.'/app/Dropbox/autoload.php';
        $this->webAuth = new 
        Dropbox\WebAuth($appInfo,$appName,'path',$csrfTokenStore);
    }
    public function dropbox_auth() {
        $authUrl = $this->webAuth->start();
    }
}
    $dropbox = new Dropboxapi();
    $dropbox->dropbox_auth();

答案 2 :(得分:-1)

示例代码。替换您的要求。

你必须把一切都变成静态的

abstract class Dropboxapi {
    protected static $webAuth;

    public static function abi() {
       self::start();
       self::dropbox_auth();
    }

    public static function start() {
        self::$webAuth = new Stdclass();
    }

    public static function dropbox_auth() {
       var_dump(self::$webAuth);
    }
}

Dropboxapi::abi();