2017-02-24 11 views
0

私の子クラスと私のシングルトンクラス:PHPクラスは、そのプロパティにシングルトンとのアクセスを拡張し

class Api 
{ 
    protected static $instance = null; 

    protected $baseUrl = 'http://google.com'; 
    protected $clientId; 
    protected $clientSecret; 

    public static function getInstance(string $clientId, string $clientSecret) 
    { 
     if (self::$instance === null) { 
      self::$instance = new self($clientId, $clientSecret); 
     } 

     return self::$instance; 
    } 

    protected function __construct(string $clientId, string $clientSecret) 
    { 
     $this->clientId  = $clientId; 
     $this->clientSecret = $clientSecret; 
    } 

    public function setBaseUrl(string $baseUrl) 
    { 
     $this->baseUrl = $baseUrl; 
    } 

    public function user() 
    { 
     return new User(); 
    } 
} 

class User extends Api 
{ 
    public function me() 
    { 
     var_dump($this->baseUrl); // HERE 
    } 
} 

は、私は次のようにそれを使用したいと思います:

$api = Api::getInstance('abc', 'def'); 

$api->setBaseUrl('http://google.dev'); 

$api->user()->me(); 

をどのようにこのスクリプトを呼び出しme()http://google.devの値は、User

また、のコンストラクタパラメータを処理するためにUserを設定するにはどうすればよいですか?

私の例でうまく実装されていない既存のパターンを使用しようとしますか?

答えて

0

user()を呼び出すと、Userクラスの新しいインスタンスが作成されるという問題があります。作成したApiインスタンスの属性と、setBaseUrl()という名前の属性は認識されません。

本当にあなたの必要条件はここにあります。

あなたはAPI->ユーザー()、新しいユーザーを毎回返すために、あなたは、APIのurl属性の現在値で初期化でき...しかし、あなたはその後、APIインスタンス上setBaseUrlを呼び出す場合をしたい場合それ以前に作成したユーザーには以前の値がそのまま残ります。

URLをすべてのインスタンスで共有したい場合は、その属性を静的にすることができます...しかし、そうするならば、$ user->

まずsetBaseUrl(...)と、すべてのユーザー APIインスタンスのURLを変更...

UPDATEは、私はあなたのUserクラスのサブクラス作ると思いますとは思いませんAPI ...

私に鳴る音あなたのAPIのように、リモートAPIにサービスを提供することと、ユーザーはAPIとは別の実際のオブジェクトです。

そして、あなたのAPIがシングルトンであるため、ユーザーインスタンスは絶対にそれのためのものを処理するために、それを呼び出すことができます。

API::getInstance()->getBaseUrl(); 

、または直接、いくつかのAPIメソッドを呼び出します。

返すことができ
API::getInstance()->loadAPIObject(); 

生のAPIオブジェクトであり、ユーザーがそれ自身の属性を満たすために解析または使用するよりも...

これは少し物事を明確にするのに役立ちますか?

+0

私はこの問題を理解しています。どのように$ this-> baseUrlの良い値を持つように私のユーザークラスに伝える?実際には、親ではなく子クラスをインスタンス化することで簡単にできますが、親と仕事をすることを支持するかどうかを微調整する方法はありますか? – Syl

+0

右 - 私は自分の答えを更新しました。 – MacPrawn

関連する問題