【问题标题】:Validate Certain PHP Class Methods are Called验证调用了某些 PHP 类方法
【发布时间】:2015-08-12 20:18:59
【问题描述】:

我有一个类,其中大多数方法都需要运行。 我通常在实例化 Object 后调用这些方法。

<?php

try { 
   $obj = new MyClassName();
   $obj->Method1($var);
   $obj->Method2($var);
   $obj->Method3($var);
   $obj->Method4($var);

} catch(Exception $e) { 

}
?>

随着我的类的增长,以及更多的方法被引入,我发现我需要确保某些方法被调用。

起初,我在 __construct() 中调用了所有必需的方法,然后再次调用这些相同的方法,以防我需要更改。

我的其他验证技术是运行 get_object_vars() 并检查特定属性是否存在。

我不介意我目前的验证方式,但我必须询问是否有更简单/更好的方式。

【问题讨论】:

  • 我一般会说构造函数是他们的地方
  • 您必须只验证某些方法还是全部验证?
  • 这对我来说似乎是一个失败的设计,虽然它是如此抽象以至于很难说。
  • 不知道代码听起来有点像你可能会从某种Dependency Injection 中受益。你读过很多关于设计模式的书吗? PoEAA 是一本很好的读物,仍然非常相关..
  • 需要运行是什么意思?它们是否需要在对象用于某件事之前运行?

标签: php class methods


【解决方案1】:

您基本上可以通过多种方式进行。甚至还有一个名为 Chain of Responsability 的模式就是为了这个!

您是否需要随时更改方法执行?例如,您可以创建一些场景

class Scenarios 
{

   public $availableScenarios = array('carPayment' => 'car payment', 
                             'carStatus' => 'car status', 
                             'carPriceCalculator' => 'calculate car price');

   public function __consctruct($myChainedExecution)
   {

       foreach ( $this->$myChainedExecution() as $executedMethod ) 
       {

         if ( in_array(!$myChainedExecution ,array_values($this->availableScenarios))) {  
             Throw new \InvalidArgumentException('Process not recognized!');
         }             

         if( !$this->$executedMethod() ) {
             Throw new \BadMethodCallException("error on $executedMethod method ");
         }

         return true;            

       }     

   }

   public function carPayment()
   {
      return  array('method1',
                    'method2',
                    'method3');
   }


  //would return true or false using attributes for internal values
  public function method1(){}
  public function method2(){}
  public function method3(){}

}

因此,当您致电 $process = new Scenario('car payment'); 时,我知道代码会尝试在内部处理该问题,一些异常情况您将涵盖所有内容

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    相关资源
    最近更新 更多