【问题标题】:Combine two PHP objects (classes)组合两个 PHP 对象(类)
【发布时间】:2012-05-25 19:46:03
【问题描述】:

我正在处理一个需要许多单独的对象(类)才能协同工作的项目。我已经想出了解决问题的方法,但我只是想听听其他观点,因为我觉得我错过了一些东西。

所以本质上,我有一个访问者和一个位置类,每个类都被初始化并存储在一个变量中,例如 $visitor 和 $location;都具有访问者独有的数据和页面调用中引用的位置。

我想要/需要做的基本上是建立一个“桥梁”,这样我就可以调用一个会影响这两个对象的方法。例如,我希望能够调用 $bridge->favorite();除了增加该位置的收藏夹数量之外,它还将将该收藏夹引用添加到访问者的个人资料中。

我现在所做的基本上是架起了一座桥梁:

$bridge = new Bridge($locationclass, $visitorclass);
$bridge->favorite();

所以它本质上调用了我拥有的另一个类“bridge”,使用方法最喜欢的方法,然后将使用已经设置的两个类。我认为这是一个不错的解决方案,但我觉得我错过了一个更好的解决方案。

所有输入都将非常有帮助,感谢您的宝贵时间!

【问题讨论】:

    标签: php class object


    【解决方案1】:

    如果你需要做这种事情,那就意味着你的应用程序设计得不好。

    要回答您的示例,您只需将位置添加到访问者最喜欢的地方即可。
    如果您想计算某个位置被添加到收藏夹的次数,请计算有多少访问者将其添加到收藏夹中。不要存储两次相同的信息。

    【讨论】:

    • 嗨 Samy,感谢您抽出宝贵时间回复。感谢您的反馈!
    【解决方案2】:
    class Bridge{
    
    private $classes;
    
    function  construct($classes)
    {
     $this->classes  = $classes;
    }
    
    function _call($name,$params)
    {
      foreach($classes as $class)
      {
        if(method_exists($class,$name)){
         return call_user_method_array($name,$class,$params);
        }
      }else{
       ...
      }
    }
    

    【讨论】:

    • 这只是一种解决方法,如果您没有其他想法来解决问题,请使用它。
    • 您好 Pethical,感谢您的回复。这与我目前的情况非常相似,您认为这是解决问题的最佳方法吗?
    • 如果你没有另一个,那么我的回答是肯定的。但是,如果可以的话,您需要重新设计您的应用,因为这不是最佳做法。
    猜你喜欢
    • 2015-01-26
    • 2020-03-22
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 2021-03-08
    • 2015-08-06
    相关资源
    最近更新 更多