PHP中的新手,请求澄清概念

Tim*_*zee 9 php oop

我喜欢PHP语言,我有一些编码经验,但我对PHP很新,虽然我已经学到了很多东西我觉得我现在因为没有掌握OOP概念而陷入困境,尽管我已经浏览了多个教程.

这不是关于代码本身的问题,而是它背后的逻辑问题

考虑一下我工作的这个教程

class person { 
    var $name; 
    function set_name($new_name) { 
        $this->name = $new_name;
    } 
    function get_name() { 
        return $this->name 
    } 
} 

$stefan = new person();
$jimmy = new person;   
$stefan->set_name("Stefan Mischook"); 
$jimmy->set_name("Nick Waddles");  

echo "Stefan's full name: " . $stefan->get_name(); 
echo "Nick's full name: " . $jimmy->get_name(); ?> 
Run Code Online (Sandbox Code Playgroud)

我理解上面发生了什么,我理解这个概念,但我看不出它的好处,我只是觉得我可以通过简单的方式以更简单的方式创建上述内容

function person($name){
    return $name;
}
echo person("Tim Jones");
Run Code Online (Sandbox Code Playgroud)
  • 为什么getter和setter函数,为什么不只是类中的一个函数?
  • 当我上面的函数更短时,为什么要查看上面的所有代码?
  • 这里的好处在哪里?

我基本上只是想找个人给我一些关于整个OOP概念的澄清,我似乎无法通过我读过的许多重复教程得到这些概念.

sym*_*ean 1

考虑一下当您想要更改代码的行为时会发生什么 - 假设它已经运行了一段时间,并且您发现有大量重复记录,其中人们在空格和大写字母中使用了变体。然后您可能想将代码修改为......

 function set_name($new_name) { 
    $new_name=trim(strtoupper($new_name));
    $new_name=str_replace('  ',' ', $new_name);
    $new_name=str_replace('  ',' ', $new_name);
    $name_parts=explode(' ', $new_name);
    $this->surname=array_pop($name_parts);
    $this->forenames=implode(' ', $name_parts);
 } 
 function get_name()
 {
    return $this->forenames . ' ' . $this->surname;
 }
Run Code Online (Sandbox Code Playgroud)

但是您不需要更改与该对象交互的任何代码。

现在考虑一个描述组织而不是个人的类 - 他们有名字 - 但没有名字和姓氏。如果您有一个具有相同接口(get_name、set_name)的类,那么您可以在圣诞卡打印机应用程序中添加人员和组织的混合包,而无需修改应用程序以应对不同的数据类型。

(教程示例保持非常简单是有原因的,不幸的是,OO 的很多好处只有在处理复杂问题时才变得明显 - 坚持下去,你就会到达目的地)