您的第一个代码段是正确的。然而,您的示例并没有真正封装(请原谅双关语)OOP的真正本质。
对象具有属性和方法。属性存储有关对象的信息,方法修改此信息。第一个示例通过将名称存储为属性来实现这一点。无论哪个方法被调用,firstname属性都会在整个类中持续存在。
在第二个示例中,您根本没有声明属性。只有两个不相关的方法可以处理它们自己的数据。在方法之外,您的属性值不存在。
另一种方法是添加一个姓氏属性和一个getFullName()方法。例1可以很容易地实现这一点。
class names
{
private $first_name;
private $surname;
public function getFullName()
{
return $this->first_name . ' ' . $this->surname;
}
public function setUpperCase($first_name)
{
$this->first_name = ucfirst($first_name);
}
public function viewUpperCase()
{
echo $this->first_name;
}
}
$names = new names();
$names->setUpperCase("jimbo");
$names->viewUpperCase();
对于示例2,这是人为的,因为您必须将两个名称都传递到getFullName()方法中才能获得正确的返回值。这就破坏了创建一个对象的目的,该对象本来是存储所有数据和相关操作的实体。在示例2中,您不存储数据。。。只有手术。