假设我有一群人,每个人都有姓名,性别和年龄属性,编码如下:
public class Person { private $name,$sex,$age; public function Person ($name,$age) { $this->name = $name; $this->sex = $sex; $this->age = $age; } public function getName(); public function getSex(); public function getAge(); } public class People { private $people = array(); public function addPerson ($name,$age) { $this->people[] = new Person($name,$age); } }
解决方法
这是一个带有静态方法的工作代码.它还使用静态方法可以访问私有ivars的事实:)
它还使用PHP令人敬畏的反身性<3. 关于该代码的好处是Person是提供排序方法的类,从OOP的角度来看更好.只有类Person才能知道如何对其他Person进行排序.人或其他独立功能都不应该. 注意:不使用is_callable(),因为它只验证参数是否可以作为函数调用,但不检查它是否可以使用当前可见性实际调用(public,private,protected)
它还使用PHP令人敬畏的反身性<3. 关于该代码的好处是Person是提供排序方法的类,从OOP的角度来看更好.只有类Person才能知道如何对其他Person进行排序.人或其他独立功能都不应该. 注意:不使用is_callable(),因为它只验证参数是否可以作为函数调用,但不检查它是否可以使用当前可见性实际调用(public,private,protected)
class Person { private $name,$age; public function Person($name,$age) { $this->name = $name; $this->sex = $sex; $this->age = $age; } public static function sortByName(Person $p1,Person $p2) { return strcmp($p1->name,$p2->name); } public static function sortByAge(Person $p1,Person $p2) { return ($p1->age - $p2->age); } } class People { private $people = array(); public function addPerson($name,$age) { $this->people[] = new Person($name,$age); } public function display() { print_r($this->people); } public function sort($attribute = 'name') { $sortFct = 'sortBy' . ucfirst(strtolower($attribute)); if (!in_array($sortFct,get_class_methods('Person'))) { throw new Exception('People->sort(): Can\'t sort by ' . $attribute); } usort($this->people,'Person::' . $sortFct); } } $people = new People; $people->addPerson('Steve','M',31); $people->addPerson('John',24); $people->addPerson('Jane','F',26); $people->addPerson('Sally',21); $people->display(); $people->sort(); $people->display(); $people->sort('age'); $people->display();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。