php静态属性获取$_get,php - PHP的静态属性的Magic __get getter - SO中文参考 - www.soinside.com...

非常好mbrzuchalski。但它似乎只适用于公共变量。只需将您的开关更改为允许它访问私有/受保护的:

switch($match[1]) {

case 'get': return self::${$property->name};

case 'set': return self::${$property->name} = $args[0];

}

而你可能想要更改if语句以限制可访问的变量,否则它将无法使它们成为私有或受保护的目的。

if ($reflector->hasProperty($property) && in_array($property, array("allowedBVariable1", "allowedVariable2"))) {...)

因此,例如,我有一个类,旨在使用ssh pear模块从远程服务器中为我提取各种数据,我希望它根据要求查看的服务器对目标目录做出某些假设。调整版mbrzuchalski的方法是完美的。

static public function __callStatic($method, $args) {

if (preg_match('/^([gs]et)([A-Z])(.*)$/', $method, $match)) {

$reflector = new \ReflectionClass(__CLASS__);

$property = strtolower($match[2]). $match[3];

if ($reflector->hasProperty($property)) {

if ($property == "server") {

$property = $reflector->getProperty($property);

switch($match[1]) {

case 'set':

self::${$property->name} = $args[0];

if ($args[0] == "server1") self::$targetDir = "/mnt/source/";

elseif($args[0] == "server2") self::$targetDir = "/source/";

else self::$targetDir = "/";

case 'get': return self::${$property->name};

}

} else throw new InvalidArgumentException("Property {$property} is not publicly accessible.");

} else throw new InvalidArgumentException("Property {$property} doesn't exist.");

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值