PHP中使用Google AdWords API时无法跨类访问变量的问题
嘿,我之前在对接Google AdWords API时也碰到过类似的变量传递坑,给你几个靠谱的解决思路,应该能帮你搞定这个问题:
解决思路1:通过构造函数传递Campaign ID(最推荐的面向对象写法)
这是最规范的做法,把获取到的$mycampaignID作为参数传给创建广告组的类的构造函数,类内部就能直接使用了,完全规避作用域问题:
// 假设你已经从Campaign创建接口拿到了ID $mycampaignID = '123456789'; // 实际是API返回的真实ID // 定义创建广告组的类 class AdGroupCreator { private $campaignId; // 构造函数接收Campaign ID并存储 public function __construct($campaignId) { $this->campaignId = $campaignId; } public function createAdGroup() { // 这里直接用$this->campaignID即可 $adGroup = new AdGroup(); $adGroup->setCampaignId($this->campaignId); // 后续广告组的其他配置逻辑... // 比如设置名称、出价策略等 } } // 使用时直接把ID传入类实例 $adGroupCreator = new AdGroupCreator($mycampaignID); $adGroupCreator->createAdGroup();
解决思路2:通过公共方法设置Campaign ID
如果没办法在类实例化时传入ID,也可以给类加一个set方法来手动设置:
class AdGroupCreator { private $campaignId; public function setCampaignId($campaignId) { $this->campaignId = $campaignId; } public function createAdGroup() { // 先判断ID是否已设置,避免报错 if (empty($this->campaignId)) { throw new Exception("请先设置Campaign ID"); } // 使用$this->campaignId创建广告组... } } // 使用流程 $adGroupCreator = new AdGroupCreator(); $adGroupCreator->setCampaignId($mycampaignID); $adGroupCreator->createAdGroup();
解决思路3:检查全局变量的正确用法(不推荐,但可以应急)
如果你之前尝试全局变量没成功,大概率是没在类的方法内部声明global关键字,正确写法是:
// 全局变量定义(尽量避免,容易导致代码耦合) $mycampaignID = '123456789'; class AdGroupCreator { public function createAdGroup() { global $mycampaignID; // 必须在方法内部声明要使用的全局变量 if (isset($mycampaignID)) { // 现在可以正常使用$mycampaignID了 } } }
⚠️ 这里提醒下:全局变量会让代码的依赖关系变得模糊,后期维护容易出问题,尽量优先用前两种面向对象的方式。
额外排查点:变量的作用域是否正确
还要确认你获取$mycampaignID的代码是不是在某个局部作用域里(比如某个函数内部),如果是,一定要把这个ID返回出来,否则外部的类根本访问不到:
function createCampaign() { // 调用AdWords API创建Campaign的逻辑 $campaignService = // 初始化API服务 $campaignOperation = // 构建Campaign操作对象 $result = $campaignService->mutate([$campaignOperation]); // 提取并返回Campaign ID return $result->getValue()[0]->getCampaignId(); } // 先获取ID,再传给广告组创建类 $mycampaignID = createCampaign(); $adGroupCreator = new AdGroupCreator($mycampaignID);
内容的提问来源于stack exchange,提问作者Tim Denali
相关产品推荐
相关产品推荐

