2017-07-29 80 views
-2

我查找了一些解决方案,但没有任何解决方法。我意识到,常数不应该是可以修改的,因此“恒定”这个词的整个意义。将常量定义为变量

在这种情况下,我处理这个是这样的

class GetAdGroups { 

    const CAMPAIGN_ID = ""; 

我要传值CAMPAIGN_ID的API类,但它不能被硬编码为一个字符串。

所以下面是不是一种选择:

const CAMPAIGN_ID = 123; 

我试图去“定义”

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

但它抛出一个错误,当我把它定义类的范围之内,这也抛出一个错误,该常量未找到。

不知道还有什么可以尝试的。很新的OOP和会感谢你的帮助

+3

如果某件事不能定义为常量 - 那么它是__NOT__常量。 –

+0

我可能会做这个倒退,API期望如何接收该值的常量?这意味着它必须被硬编码? –

+0

通常,您将一些数据作为数组或其他结构传递给API。所以,我不知道这里涉及的是多久。为什么不创建类属性? –

回答

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() 
     ); 
     } 
+0

这些特征意味着某些东西被__earlier__定义为常量。这就是为什么它可以用于新的常量。在OP问题中还有另外一种情况。 –

+0

不幸的是,正如u_mulder所说,我不能使用这个。该值必须来自一个变量,我不能用数学表达式来计算它。 –

+0

@u_mulder他错过了文档,还有另一类。检查我提供的链接:D –

1

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

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

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

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


$my_const = unserialize(ALLVAR); 

在你的类内部,你可以为常量定义一个函数。如下所示

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')); 
+0

谢谢,问题是它不允许我使用公共属性,就像在你的例子中它有一个“const”一样,所以如果我使用公共属性,它会抛出一个错误'常量缺失”。我需要几行代码,所以它接受一个类属性,而不是一个常量,使其工作 –

+0

然后,你可以使用它 私人静态$选择=数组( 'app_id'=>'你好', ); 和 public static function getConstant($ key){ return self :: $ options [$ key]; }。的print_r(GetAdGroups :: getConstant( 'APP_ID')); –

+0

是的,但它仍然没有将变量传递给常量,我们仍然处理属性(私有或公共):) –