1
zaishanfeng2014 2014-07-03 18:10:34 +08:00
反射,可以吗?
|
2
foccy 2014-07-03 18:14:50 +08:00
有这样的需求,我觉得你应该在函数内检查。
|
3
likexian 2014-07-03 18:17:08 +08:00
$a = new ReflectionProperty('config', 'message');
var_dump($a->isStatic()); 请叫我PHP大神然后点赞 |
4
likexian 2014-07-03 18:21:09 +08:00
好吧,我看错了,无视我吧
|
6
likexian 2014-07-03 18:28:23 +08:00 1
你往a传入的是个数值了,数值就是数值,他来自哪里是没有标记的,反射是反射不了了
所以,你的需求基本上无解 |
7
wesley 2014-07-03 18:28:30 +08:00
function a($b){
return property_exists(config,$b); } |
8
minbaby 2014-07-03 18:30:55 +08:00
|
10
foccy 2014-07-03 18:33:29 +08:00
这样?
public function a($b) { $hit = false; $reflection = new ReflectionObject($this); foreach ($reflection->getProperties() as $property) { if ($property->isStatic()) { // 限制静态属性 if ($b === $property->getValue()) { $hit = true; } } } if (!$hit) { throw new Exception('参数不在对象属性中'); } } |
12
minbaby 2014-07-03 18:36:52 +08:00 1
@haython function 中你得到的参数是值,
而你想要的是验证参数是 config 类的属性, 那么肯定不能直接直接根据参数来判断, 非要实现这个东西的话,我觉得只能改写方法, function a($class, $property){} 类似,才能判断, |
13
wesley 2014-07-03 18:37:35 +08:00
$a = new ReflectionClass('config');
print_r( $a->getStaticProperties() ); |
15
dorentus 2014-07-03 20:33:38 +08:00 1
你这背后的真实需求是什么?
|
16
Actrace 2014-07-03 21:02:19 +08:00
<?php
class type_a{ public $val = 1; } function main(type_a $object){ var_dump($object); } $new_type_a = new type_a; main($new_type_a); //结果会是 //object(type_a)#1 (1) { // ["val"]=> // int(1) //} //如果你给的参数不是type_a类产生的对象. $new_object = 1;//实际上 int 是一种内置类型 main($new_object); ////这将会报错 //Catchable fatal error: Argument 1 passed to main() must be an instance of type_a, integer given |
17
Actrace 2014-07-03 21:05:35 +08:00
可以要求参数为具体类(string,int,function都是内置的类),不过没有尝试过具体到属性.你可以在实现的内部指定目标属性,需要自己检查.
根据上面的帖子,稍微改下. function main(type_a $object){ isset($object->val); } |
18
SoloCompany 2014-07-03 21:51:20 +08:00 1
如果你的真实需求是 enum,那么请使用真正的 enum
另外,这种典型的 ab 问题还是少出显得好 |