【问题标题】:Using a variable to define my method使用变量来定义我的方法
【发布时间】:2013-11-29 08:55:37
【问题描述】:

我有一个函数,它是 Post Affiliate Pro API 调用的包装器。我正在尝试将一个可选参数传递给我的函数来设置数据范围。 API 在其自己的参数之一中使用以下方法:

Gpf_Data_Filter::RANGE_LAST_7_DAYS 

这是在我自己的函数的上下文中。我想通过 $range 选项。我这样做的方式显然会给出一个未定义的常量警告,然后导致一个致命错误。

function getSales($session, $userID, $campaignID, $range = RANGE_LAST_7_DAYS ){
    $request = new Pap_Api_TransactionsGrid($session);
    $request->addFilter('dateinserted', Gpf_Data_Filter::DATERANGE_IS, Gpf_Data_Filter::$range);
    // ...rest of function

我需要传递什么作为第三个参数来复制它? :

Gpf_Data_Filter::RANGE_LAST_7_DAYS 

【问题讨论】:

  • 不确定我是否正确理解了您的问题,您为什么不能在函数中使用$range = Gpf_Data_Filter::RANGE_LAST_7_DAYS 作为默认的第四个参数?
  • 是的,就是这样。很好地理解了我解释不清的问题。绝对是那些让自己兴奋的时刻之一。
  • 您能否将其发布为答案,我会接受。

标签: php api function constants


【解决方案1】:

PHP 允许您使用来自另一个类的常量作为函数或类方法的默认参数,所以这应该很好:

function getSales($session, $userID, $campaignID, $range = Gpf_Data_Filter::RANGE_LAST_7_DAYS)

【讨论】:

    【解决方案2】:

    这样的事情应该可以工作......

    function getSales($session, $userID, $campaignID, $range = null){
        $range = $range ?: Gpf_Data_filter::RANGE_LAST_7_DAYS;
        $request = new Pap_Api_TransactionsGrid($session);
        $request->addFilter('dateinserted', Gpf_Data_Filter::DATERANGE_IS, $range);
        // ...rest of function
    

    【讨论】:

      【解决方案3】:

      你基本上有三个选择:

      1. 传递实际常量:

        function getSales(..., $range = Gpf_Data_Filter::RANGE_LAST_7_DAYS)
        
      2. 定义自己的值或常量,并将它们映射到官方常量:

        function getSales(..., $range = 'seven') {
            static $ranges = [
                'one'   => Gpf_Data_Filter::RANGE_LAST_1_DAY,
                ...
                'seven' => Gpf_Data_Filter::RANGE_LAST_7_DAYS,
            ];
            $range = $ranges[$range];
        
      3. 接受一个数字并从中构造常量名:

        function getSales(..., $range = 7) {
            $range = constant("Gpf_Data_Filter::RANGE_LAST_$range_DAYS");
        

      哪一个效果最好取决于这些常量的多样性以及您是否要将原始常量公开给您的类的用户。

      【讨论】:

        【解决方案4】:

        感谢丝火:

        function getSales($session, $userID, $campaignID, $range = Gpf_Data_Filter::RANGE_LAST_7_DAYS ){
            $request = new Pap_Api_TransactionsGrid($session);
            $request->addFilter('dateinserted', Gpf_Data_Filter::DATERANGE_IS, $range);
        

        我现在已经设置了 2 杯咖啡的门槛,以后再在这里发帖。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-12-08
          • 2015-02-13
          • 1970-01-01
          • 1970-01-01
          • 2012-11-10
          • 2021-03-30
          • 2014-06-17
          相关资源
          最近更新 更多