2017-06-16 1 views
1
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(); 

Ici, j'ai l'objet $webAuth dans la fonction de démarrage. Lorsque j'utilise ceci dans dropbox_auth, il montre Undefined variable: webAuth.Comment utiliser une variable de fonction à une autre fonction dans la classe abstraite

Quand j'utilise $this->webAuth je reçois Using $this when not in object context

j'ai essayé comme l'auto :: webAuth aussi. Ceci montre Access to undeclared static property:. Donc je ne comprends pas comment l'utiliser.

+0

Pourquoi vous avez besoin classe abstraite ici, supprimer et utiliser $ abstrait ce contexte – Subash

+0

pas que je dois utiliser class.that abstraite est l'exigence –

+2

Essayez de faire votre propriété webAuth une variable statique – Akintunde007

Répondre

0

Si la méthode abstraite est définie comme protégée, l'implémentation de la fonction doit être définie comme protégée ou publique, mais pas comme privée.

Plusieurs exemples sont there pour abstrait class.Just vérifier comment vous pouvez ou vous avez demandé not.As sans abstraite définir simplement la classe et la fonction comme below.Here toutes les variables et les méthodes sont $ ce contexte.

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(); 
-1

Exemple de code. Remplacer avec votre condition.

vous devez faire tout statique

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(); 
+0

oui .when j'ai déclaré toutes les fonctions comme statique alors cela fonctionne. –

+0

Merci @Subash –

+1

Où est la POO dans ce code? Je ne le trouve pas. Tout ce que je peux voir, ce sont des variables globales et des fonctions à l'intérieur d'un espace de nommage sophistiqué appelé 'Dropboxapi'. – axiac

0

Vous définissez des choses mauvaises. Les classes abstraites, similaires à l'interface, ont tendance à être utilisées comme classe "blueprint". Cela signifie qu'ils doivent être étendus par d'autres classes pour être utilisés, et ne peuvent pas être utilisés tels quels. En utilisant $this dans la classe abstraite est très bien, comme dans la documentation de résumé par php.net: http://php.net/manual/en/language.oop5.abstract.php.

Ce que vous devez faire, est d'avoir une autre classe héritant/augment que DropBoxApi classe de la vôtre, ex:

class DropBoxApi2 extends DropBoxApi 
{ 

} 

Comme classe DropBoxApi2 est héritée, il a déjà des fonctions et des biens de son parent (DropBoxApi). Et vous pouvez l'utiliser comme (exemple):

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

De plus, le double-point que vous utilisez est un opérateur statique. Ce qui est loin concept différent de l'abstrait.