gpt4 book ai didi

php - 在生产代码中使用反射不好吗?

转载 作者:可可西里 更新时间:2023-10-31 22:16:14 26 4
gpt4 key购买 nike

我有一个 Validator创建 Validations 实例的类类,其中包含所有验证方法。执行验证时,__callValidator用于调度调用 Validator->validate_<i>method</i>Validations-><i>method</i> .

例如,Validations 中有一个方法称为 length_of .当运行以下代码时:

$v = new Validator();
$v->validate_length_of(...);

length_ofValidations 中验证类被执行。

为了保证__call不会尝试发送到无效或非公开的 Validation方法,我使用 ReflectionMethod检查指定的方法:

$method = new ReflectionMethod($this->validations, $validation_method);
if (!$method->isPublic())
{
// error
}

我很确定这是确定方法是否公开的唯一方法,但我不确定反射是否适合在生产代码中使用。这是代码味道吗?

最佳答案

您真的不应该在生产代码中使用反射。你为什么不使用 is_callable在这里?

if (!is_callable(array('Validations', $validation_method)) {
throw new LogicException('method does not exist');
}

这会检查 Validations 类是否有一个静态方法 $validation_method 并确保您可以从当前上下文中调用它。实际上,这比反射更灵活,因为它考虑了 __call 方法和类似的东西,而反射没有。

关于php - 在生产代码中使用反射不好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3937671/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com