PHP编程中,我们习惯于用数组作为方法的返回值。因为PHP最早是一门面向过程的语言,这样的编程风格持续至今。
使用数组作为返回值,有个很大的问题,如果不运行脚本var_dump(),我们完全不知道数组里面包含些什么数据。Java却很好的避免了这个问题,所有方法的返回值都是对象,优点显而易见,对象有明确的数据结构,只要知道对象的类型,就知道它有哪些属性和方法。不仅方便了开发过程,也提升了代码的可靠性。
先来看下使用数组的编程方式:
Class Book
{
public function getUser()
{
$arr["name"] = "crazymus";
$arr["age"] = 30;
return $arr;
}
}
$user = (new Book())->getUser();
echo $user["name"]; // name属性存在吗?
echo $user["age"]; // age属性存在吗?
获取到$user后,如果不去看getUser方法,你肯定不知道$user里面包含些什么,使用起来很不方便。
下面再看看使用对象的编程方式:
class UserVo
{
protected $name;
protected $age;
public function getName()
{
return $this->name;
}
public function setName($value)
{
$this->name = $value;
}
public function setAge($age)
{
$this->age = $age;
}
public function getAge()
{
return $this->age;
}
}
先定义一个User对象,这是我们后面需要使用的。
Class Book
{
/**
* @return UserVo
*/
public function getUser()
{
$user = new UserVo();
$user->setName("crazymus");
$user->setAge(30);
return $user;
}
}
$user = (new Book())->getUser();
echo $user->getName();
echo $user->getAge();
可以看到getUser方法返回的不再是数组,而是User对象,它的数据结构上面已经有了明确的定义。如果你使用IDE来编程,根据代码提示就能知道它有getName和getAge两个方法,使用起来非常方便。
可能有人会说,如果每个方法都要去编写一个单独的返回值类,也很麻烦。
是个好问题,我已经想到解决方案了,get和set方法其实都是类似的,完全可以用脚本来生成。后面我会尝试来编写一个这样的脚本。
编程最大的目的就是让机器来帮助我们做重复的工作,当你体会到这一点,就会发现程序员的工作原来如此有趣~