700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > php静态属性获取$_get php - PHP的静态属性的Magic __get getter - SO中文参考 - www.soinside.com...

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

时间:2020-04-03 21:13:17

相关推荐

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.");

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。