PHP

2016-03-21 25 views
5

üye değişkeni içinde ad alanı ile statik yöntem çağrısı php olarak böyle bir şey yapmak mümkün mü? Üye değişkeninde bir isim alanına sahip olmak istiyorum ve her zaman bu sınıfın her statik yöntemini aşağıda yaptığım gibi arayabilirim.PHP

Tabii ki kodum işe yaramıyor, ama sadece bunun mümkün olup olmadığını ve bir çözümün yakınına yaklaştığımı merak ediyorum ya da bu sorudan tamamen çıktıysa ve her zaman sözdizimini kullanmalı mıyım:

\Stripe\Stripe::setApiKey(..); 

Similar question for clarifications

NOT: gelecekteki devs Çizgili API

Basitleştirilmiş kodu güncellemeleri gerekir zamanlar için bakir önemli kalır Ben Çizgili sınıfı değiştiremezsiniz, bu oluyor:

class StripeLib 
{ 
    var $stripe; 

    public function __construct() 
    { 
     // Put the namespace in a member variable 
     $this->stripe = '\\'.Stripe.'\\'.Stripe; 
    } 
} 

$s = new StripeLib(); 

// Call the static setApiKey method of the Stripe class in the Stripe namespace 
$s->stripe::setApiKey(STRIPE_PRIVATE_KEY); 

cevap

1

Evet Böyle bir şey mümkün. Sınıfın ad alanı yolunu döndüren durağan class yöntemi vardır.

<?php 
namespace Stripe; 

Class Stripe { 

    public static function setApiKey($key){ 
     return $key;  
    } 

} 

class StripeLib 
{ 
    public $stripe; 

    public function __construct() 
    { 
     // Put the namespace in a member variable 
     $this->stripe = '\\'.Stripe::class; 
    } 
} 

$s = (new StripeLib())->stripe; 

// Call the static setApiKey method of the Stripe class in the Stripe namespace 
echo $s::setApiKey("testKey"); //Returns testkey 
+0

Talep ettiğiniz yanıt için teşekkürler Daan. $ StripeLib kullanmak zorunda kalmadan çalışmanın bir yolu var mı, sadece $ s kullanıyor musunuz? Korkarım bu, diğer devleri çok karıştırır – NaturalBornCamper

+0

@NaturalBornCamper Tabii ki, cevabımı düzenledim. – Daan

+0

Yani temelde bu, bağlantılı olduğum diğer soru gibi, kesinlikle normal bir değişkende olmalı? Bu $> üye :: setApiKey ("testKey") şeklinde olamaz? – NaturalBornCamper

0

Sadece test ettim, evet bunu php'de yapabilirsiniz.

Ama Bağımlılık Enjeksiyon ilkesini burada ihlal ettiğinizi düşünüyorum. Bunu yapmanın en doğru yolu şudur:

class StripeLib 
{ 
    var $stripe; 

    // make sure Stripe implements SomeInterface 
    public function __construct(SomeInterface $stripe) 
    { 
     // Stripe/Stripe instance 
     $this->stripe = $stripe; 
    } 
} 
+1

İlginç cevap Keloo, bunun için teşekkürler. Ancak Stripe sınıfını düzenleyemem, resmi bir API ve gelecekteki geliştiricilerin neden gittiğimi merak etmeden kütüphaneyi güncelledikleri için sağlam kalmasını isterim. Neden olmasaydı; şimdi yap – NaturalBornCamper