php – 区分哪些参数属于哪个对象

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 区分哪些参数属于哪个对象脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
这是一个非常具体的问题,我无法在任何地方找到答案.
这适用于许多语言,但我特别想在 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:\somePath\Event.PHP on line 35

我理解为什么.因为在“事件”中,$this指的是“派对”对象,但它是私有的.
我不打算覆盖超级构造函数中对象中的每个属性,只是属于超类(抽象类Event)本身的属性.有没有办法定位Event类的特定属性而不是子类的特定属性?这样,无论我用什么对象扩展它,我都不会意外地在子类上设置属性,因为传递的对象有一些冲突的属性

我认为这是一些非常容易的事情,比如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;
        }
    }
}
}

脚本宝典总结

以上是脚本宝典为你收集整理的php – 区分哪些参数属于哪个对象全部内容,希望文章能够帮你解决php – 区分哪些参数属于哪个对象所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。