我喜欢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)
我基本上只是想找个人给我一些关于整个OOP概念的澄清,我似乎无法通过我读过的许多重复教程得到这些概念.
考虑一下当您想要更改代码的行为时会发生什么 - 假设它已经运行了一段时间,并且您发现有大量重复记录,其中人们在空格和大写字母中使用了变体。然后您可能想将代码修改为......
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 的很多好处只有在处理复杂问题时才变得明显 - 坚持下去,你就会到达目的地)
| 归档时间: |
|
| 查看次数: |
140 次 |
| 最近记录: |