php – 区分哪些参数属于哪个对象
发布时间:2020-12-13 16:51:18 所属栏目:PHP教程 来源:网络整理
导读:这是一个非常具体的问题,我无法在任何地方找到答案. 这适用于许多语言,但我特别想在 PHP中弄明白. 为此,我将使用’events’作为我们的课程.保持简单有两种类型: abstract class Event{ protected $cost; protected $startTime; public function __construct
这是一个非常具体的问题,我无法在任何地方找到答案.
这适用于许多语言,但我特别想在 PHP中弄明白. 为此,我将使用’events’作为我们的课程.保持简单有两种类型: abstract class Event{ protected $cost; protected $startTime; public function __construct(){ foreach($eventData as $key => $val){ if(property_exists($this,$key)){ $this->$key = $val; } } } } 和 class Party extends Event{ private $hasPointyHats; public function __construct($eventData){ parent::__construct($eventData); $this->hasPointyHats = $eventData->hasPointyHats; } } Class Event有2个道具:cost和startTime.构造时,应该传递一个包含事件所有参数的关联数组,它会自动将该属性设置为传递的数组值. Class Party通过确定此事件是否具有那些令人敬畏的尖端派对帽来扩展事件(如果不是,我就不会去). 和不.不,不.因为当您传递此对象时: //Some result set... $mysqli_result = $result->fetch_assoc(); 它有cost,startTime和hasPointyHats值(可能更多!),你得到以下小错误: Fatal error: Cannot access private property Party::$hasPointyHats in C:somePathEvent.php on line 35 我理解为什么.因为在“事件”中,$this指的是“派对”对象,但它是私有的. 我认为这是一些非常容易的事情,比如super->属性或其他什么,但我仍然需要使用property_exists. 提前感谢您的帮助. 解决方法
您可以将property_exists仅使用类名而不是对象.
像这样: abstract class Event{ protected $cost; protected $startTime; public function __construct($eventData){ foreach($eventData as $key => $val){ if(property_exists(__CLASS__,$key)){ $this->$key = $val; } } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |