如何条件性为\FacebookAds\EventRequest追加setTestEventCode方法调用
解决方案
你提到的「方法链」(也叫链式调用,对应面向对象中的流畅接口设计)表述完全准确,实现动态追加调用的方案非常简单:
因为这类SDK的setter方法执行后都会返回对象本身,你只需要把连贯的链式调用拆成多步,在中间插入条件判断即可,示例代码如下:
// 第一步:实例化请求对象 $request = new \FacebookAds\Object\ServerSide\EventRequest($pixel_id); // 第二步:条件满足时追加setTestEventCode调用 if (!empty($fb_pixel_test_event_code)) { $request->setTestEventCode($fb_pixel_test_event_code); } // 第三步:继续执行后续的链式方法调用 $request->setEvents($events);
额外优化说明
你原来的条件判断if( $fb_pixel_test_event_code && !empty( $fb_pixel_test_event_code ) )存在冗余:PHP的empty()会自动判断变量是否已定义、同时判断值是否为假值(空字符串、null、0等),直接保留!empty($fb_pixel_test_event_code)即可实现完全相同的判断逻辑,不需要额外写变量判断。
如果你想保留一行链式调用的写法,也可以用PHP 8.0+支持的三元表达式写法(可读性不如拆分写法,更推荐上面的拆分方案):
$request = (new \FacebookAds\Object\ServerSide\EventRequest($pixel_id)) ->{!empty($fb_pixel_test_event_code) ? 'setTestEventCode' : 'trim'}($fb_pixel_test_event_code) ->setEvents($events);
注:上面的trim只是占位用的无副作用方法,实际场景完全不推荐这种写法,拆分调用的可读性和可维护性高得多。
内容的提问来源于stack exchange,提问作者wharfdale
相关产品推荐
相关产品推荐

