PHP OO – 如何在X之间建立类关系有很多Y.
发布时间:2020-12-13 22:54:04 所属栏目:PHP教程 来源:网络整理
导读:所以我有两个类:让我们称之为人和车 在我可以实例化之前,我需要从我的Car类中的person对象访问一些属性. 我只是简单地说一下:$car = new Car($person); ?如果是,那么如何在我的Car类中访问这些对象属性?它会是这样的: class Car{ function __construct($
所以我有两个类:让我们称之为人和车
在我可以实例化之前,我需要从我的Car类中的person对象访问一些属性. 我只是简单地说一下:$car = new Car($person); class Car{ function __construct($person) { $this->person = $person; } } 如果不是,那么实现这一目标的方法是什么? 解决方法
我们在这里有些困惑.现实世界的OOP,考虑并比较:
汽车是由一个人给予或购买的: $person->addCar($car); 一个人正在进入汽车(坐在左前座上): $car->addPerson($person,Car::SEAT_FRONT_LEFT); Car :: SEAT_FRONT_LEFT是Car的公共const成员. 为了能够构造工作对象,关系在语义上是正确的. – 要实现这一点,查找(Aware-)接口的含义可能会有所帮助. 我可能定义的示例类: interface Person { public function getHeight(); public function setHeight(); } class CarOwner implements Person { protected $height; protected $cars = array(); public function getHeight(); public function setHeight(); public function getCars(); }; class Driver implements Person { protected $height; public function getHeight(); public function setHeight(); }; class Car { protected $persons = array(); // @var array protected $readyToDrive = false; public const SEAT_FRONT_LEFT = 1; public const SEAT_FRONT_RIGHT = 2; // ... public function addPerson(Person $person,$seat) { if ($person instanceof Driver) { $this->isReadyToDrive(true); } // I know this is stupid but you get the point: if ($this->getDriver()->getHeight() < 140 && $this->getSeat()->getPosition() > 40) { throw new Exception('please set the seat to fit your height!'); } if (!in_array($person,$this->persons)) { $this->persons[$seat] = $person; } else { throw new Exception('person is already in the car!'); // Person first needs to "leave" the car! like: // $car->removePerson($person)->addPerson($person,Car::SEAT_REAR_LEFT); } } public function getDriver() { if (isset($persons[self::SEAT_FRONT_LEFT]) && $persons[self::SEAT_FRONT_LEFT] instanceof Driver) { return persons[self::SEAT_FRONT_LEFT]; } else { //... } } }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |