php - OO 及其在 PHP 中的工作原理

标签 php oop

我编写 PHP 已经有大约六年了,现在我觉得我应该做更多的事情来编写更好的代码。我知道面向对象的代码是可行的方法,但我无法理解这个概念。

谁能用任何白痴都能理解的术语解释一下 OO 以及它在 PHP 中的工作原理,或者给我指点一个白痴指南教程?

最佳答案

想一件事。任何你想做的事情。比如说,早餐。

(所有代码都是伪代码,与银行业中任何现存、已死或临床滥用的语言的任何相似之处完全是巧合,与您的帖子被标记为 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;
}

你的情况一团糟,不仅仅是因为 bean 。你已经有了一个程序员可以随意修改的数据结构,一个不断扩展的与早餐有关的函数集合,完全脱离了数据的定义。因此,您可以这样做:

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();
}

我认为这看起来更干净,并且是一种更简洁的方式来表示我们希望将其视为一致对象的数据 block 。

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

关于php - OO 及其在 PHP 中的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/84125/

相关文章:

php - 在剧透中转换行内的文本值? (PHP, MySQL)

实例方法上的Python装饰器

java - 函数式编程与面向对象编程

design-patterns - 动态对象创建模式 - 我喜欢

php - 如何打开弹出窗口并重新加载另一个页面?

php - Yii 多重关系

php通过表单更新mysql表,立即重新加载页面上的信息

php - 如何在 Doctrine 2 中获取没有关联映射的实体

PHP:如何检查两个类的所有公共(public)方法是否返回相同的值?

php - mysqli->query 在更新时返回 true,但没有行受影响