我编写 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/