是否可以在php中执行此类操作?我希望在成员变量中有一个名称空间,并且总是能够调用该类的每个静态方法,就像我在下面所做的那样。
当然我的代码不起作用,但我只是想知道这是否可行,并且我接近解决方案,或者如果这完全不可能并且必须始终使用语法:< / p>
\Stripe\Stripe::setApiKey(..);
Similar question for clarifications
注意:我无法修改Stripe类,重要的是当未来的开发者必须更新Stripe API时它不会受到影响
简化代码:
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);
答案 0 :(得分:1)
是的,这样的事情是可能的。存在可以调用的静态class
方法,该方法返回类的命名空间路径。
<?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
答案 1 :(得分:0)
我刚试过它,是的,你可以在php中做到这一点。
但我认为你违反了依赖注入原则。 正确的方法是:
class StripeLib
{
var $stripe;
// make sure Stripe implements SomeInterface
public function __construct(SomeInterface $stripe)
{
// Stripe/Stripe instance
$this->stripe = $stripe;
}
}