Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
面向对象的PHP解释一个脑死的n00b_Php_Oop - Fatal编程技术网

面向对象的PHP解释一个脑死的n00b

面向对象的PHP解释一个脑死的n00b,php,oop,Php,Oop,我写PHP已经有六年了,我觉得我应该做更多的工作来编写更好的代码。我知道面向对象的代码是一条路要走,但我无法理解这个概念 有谁能解释一下,任何傻瓜都能理解OO以及它在PHP中是如何工作的,或者给我指一个傻瓜指南教程吗?一个警告就在这里:如果不学习OO设计,你就无法学习OO编程!关键概念是定义在数据上运行的函数以及相应的数据。然后,您可以告诉对象要做什么,而无需查询其内容 当然,看看“哲学”吧,“需要知道”原则(又名“得墨忒尔定律”)也是一个非常重要的原则。任何你想做的事。喂,早餐 (所有代码都是

我写PHP已经有六年了,我觉得我应该做更多的工作来编写更好的代码。我知道面向对象的代码是一条路要走,但我无法理解这个概念


有谁能解释一下,任何傻瓜都能理解OO以及它在PHP中是如何工作的,或者给我指一个傻瓜指南教程吗?

一个警告就在这里:如果不学习OO设计,你就无法学习OO编程!关键概念是定义在数据上运行的函数以及相应的数据。然后,您可以告诉对象要做什么,而无需查询其内容


当然,看看“哲学”吧,“需要知道”原则(又名“得墨忒尔定律”)也是一个非常重要的原则。任何你想做的事。喂,早餐

(所有代码都是伪代码,任何与银行业中任何活着、死去或被临床滥用的语言的相似之处都完全是巧合,与您的帖子被标记为PHP无关)

因此,您需要定义一个模板来表示早餐。这是一门课:

class Breakfast {

}
早餐包含属性。在普通的非面向对象的东西中,您可以使用数组来实现这一点:

$breakfast = array(
'toast_slices' => 2,
'eggs' => 2,
'egg_type' => 'fried',
'beans' => 'Hell yeah',
'bacon_rashers' => 3 
);
你可以使用各种各样的功能来摆弄它:

function does_user_want_beans($breakfast){
     if (isset($breakfast['beans']) && $breakfast['beans'] != 'Hell no'){
         return true;
     }
     return false;
}
你的生活一团糟,不仅仅是因为豆子。你已经有了一个程序员可以随意处理的数据结构,一个不断扩展的函数集合,用来做早餐,完全脱离了数据的定义。因此,您可以这样做:

class Breakfast {
  var $toast_slices = 2;
  var $eggs = 2;
  var $egg_type = 'fried';
  var $beans = 'Hell yeah';
  var $bacon_rashers = 3;

  function wants_beans(){

     if (isset($this->beans) && $this->beans != 'Hell no'){
         return true;
     }

     return true;

  }

  function moar_magic_pig($amount = 1){

     $this->bacon += $amount;

  }

  function cook(){
      breakfast_cook($this);
  }

}
然后操纵程序的早餐理念就变得干净多了:

$users = fetch_list_of_users();

foreach ($users as $user){
    // So this creates an instance of the Breakfast template we defined above

    $breakfast = new Breakfast(); 

    if ($user->likesBacon){
       $breakfast->moar_magic_pig(4);
    }

    // If you find a PECL module that does this, Email me.
    $breakfast->cook();
}
我认为这看起来更干净,而且是一种更整洁的表示数据块的方法,我们希望将其视为一致的对象


有更好的解释说明OO实际上是什么,以及为什么它在学术上更好,但这是我的实际原因,它包含培根。

最好的建议来自:xtofl.myopenid.com^^^^


如果您不了解模式的用途,那么您就不会充分使用对象。您需要知道为什么继承、多态性、接口、工厂、装饰器等通过解决特定问题而使设计变得更容易。

与其从头开始学习OO,不如采用一种有利于面向对象编程的框架。它将“强制”您使用正确的OOP方法;您将能够从框架的编写方式中学习如何最好地实现OOP

我建议使用QCodo PHP5框架。它有关于如何设置的精彩视频教程,以及视频培训()


充分披露:我已经在这个框架上开发了两年,我已经为他们的代码库贡献了代码(所以我不是完全公正的:-))

学习OO的另一个指针:


大多数OO教程将重点介绍继承(例如,类X扩展类Y)。我认为这是个坏主意。继承是有用的,但也可能导致问题。更重要的是,继承不是OO的重点。重点是抽象;隐藏实现细节,以便使用简单的接口。学习如何为数据编写良好的抽象,您将处于良好状态。不要马上担心继承的事情。

我一直站在你的立场上,但我在读了这本书之后(几次!)看到了光明。读了这本书之后,我真的“明白”了,我没有回头看。你可以在亚马逊上找到它

我希望你坚持,得到它,并且热爱它。当它走到一起时,它会让你微笑


组合胜过继承。

使用OO的一些关键原因是以类似于我们人类感知和关联事物的方式构造代码,并利用经济性可维护性可靠性可伸缩性的好处

i、 e:人类几千年前就设计了轮子。我们可能一直在改进它,但我们当然不需要再重新发明它

1)我们喜欢对事物进行分类:“这个比这个大”、“这个比那个贵”、“这个和那个差不多”

2)我们喜欢简化事情:“好吧,这是一台V8液冷涡轮驱动拖拉机,但我仍然只需转动方向盘并将脚踩在踏板上驾驶它,对吗?”

3)我们喜欢将事物标准化:“好吧,让我们把三角形、圆和正方形称为所有形状,并期望它们都有一个面积和周长”

4)我们喜欢适应事物:“嗯,我喜欢这样,但我可以把它改为赛车场的果岭吗?”

5)我们喜欢创建蓝图:“我还没有时间、资金(或批准)来建造它,但它将有一扇门、一个屋顶、一些窗户和墙壁。”

6)我们喜欢保护物品:“好的,我会让你看看总价格,但我对你隐瞒了我增加的价格!”

7)我们喜欢通过互相沟通“我想通过手机、电脑、自动取款机、银行职员等方式查看我的银行余额。”

要了解如何利用OO(并了解其中的一些优点),我建议您将自己的练习作为家庭作业-可能是一个基于浏览器的应用程序,它处理诸如圆、矩形和三角形等形状,并跟踪它们的面积、颜色、位置,然后加上正方形作为矩形的特例,因为它在大多数定义、面积等方面都是相同的。只是增加了一个条件,即高度和宽度相同。为了让它更难,你可以把一个矩形做成一种q