我查了几个解决方案,但没有什么能够解决它。我意识到常量不应该是可修改的,因此“常量”这个词的整个要点。
在这种情况下,我正在处理类似这样的API类
class GetAdGroups {
const CAMPAIGN_ID = "";
我必须将值传递给CAMPAIGN_ID,但不能将其硬编码为字符串。
所以以下不是一个选项:
const CAMPAIGN_ID = 123;
我尝试使用“define”
class GetAdGroups {
$my_var = 123;
define("CAMPAIGN_ID", "$my_var");
但它抛出一个错误,当我在类范围之外定义它时,它也会抛出一个错误,找不到常量。
不确定还有什么可以尝试。对OOP来说很新,感谢您的帮助
答案 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'));