将const定义为变量

时间:2017-07-29 20:14:29

标签: php

我查了几个解决方案,但没有什么能够解决它。我意识到常量不应该是可修改的,因此“常量”这个词的整个要点。

在这种情况下,我正在处理类似这样的API类

class GetAdGroups {

  const CAMPAIGN_ID = "";

我必须将值传递给CAMPAIGN_ID,但不能将其硬编码为字符串。

所以以下不是一个选项:

const CAMPAIGN_ID = 123;

我尝试使用“define”

class GetAdGroups {
  $my_var = 123;
  define("CAMPAIGN_ID", "$my_var");

但它抛出一个错误,当我在类范围之外定义它时,它也会抛出一个错误,找不到常量。

不确定还有什么可以尝试。对OOP来说很新,感谢您的帮助

2 个答案:

答案 0 :(得分:1)

选中此what are new features in php 5.6

<?php
const ONE = 1;
const TWO = ONE * 2;

class C {
    const THREE = TWO + 1;
    const ONE_THIRD = ONE / self::THREE;
    const SENTENCE = 'The value of THREE is '.self::THREE;

    public function f($a = ONE + self::THREE) {
        return $a;
    }
}

echo (new C)->f()."\n";
echo C::SENTENCE;
?>
这可能会对你有所帮助。您可以在此处将表达式用作常量值。

注意: -

  

现在可以提供涉及数字的标量表达式   PHP之前的上下文中的字符串文字和/或常量   期望一个静态值,例如常量和属性声明   和默认函数参数。

是的,这是不可能的,即使你做不到

function bar(){
    return 'Hi';
}
class C {
    const SENTENCE = bar();    
    //const SENTENCE = :SELF:foo();


    public static foo(){
        return "Hello';
    }
}
echo C::SENTENCE;

@u_mulder非常正确。

您错过了正确阅读文档的内容。

/**
 * This example gets all ad groups in a campaign. To get campaigns, run
 * GetCampaigns.php.
 */

请检查this class。 这里您的广告系列ID是可变的。

 foreach ($page->getEntries() as $campaign) {
          printf(
              "Campaign with ID %d and name '%s' was found.\n",
              $campaign->getId(),
              $campaign->getName()
          );
        }

答案 1 :(得分:1)

如果您使用的是PHP 7+,那么您可以使用这种方式。

// Works as of PHP 7
define('ALLVAR', array(
    'dog',
    'cat',
    'bird'
));
echo ALLVAR[1]; // outputs "cat"

如果您使用的是php&lt; 7然后用这种方式。

define ("ALLVAR", serialize (array ('dog','cat','bird')));


$my_const = unserialize(ALLVAR);

在Class中,您可以为常量定义一个函数。如下所示

class  GetAdGroups{
    public $options = array(
        'app_id' => 'hello',
    );
    public function getConstant($key){
        return $this->options[$key];
    }
}

$a = new GetAdGroups();

print_r($a->getConstant('app_id'));