如果不使用OO-PHP,我将面临哪些问题?
我面对一个;我设置了相同的变量名,这让我疯狂,我必须检查所有的变量名,我必须记住它们。现在我意识到OO不会有问题,因为它们会被隐藏(封装?)如果不使用OO-PHP,我将面临哪些问题?,php,oop,Php,Oop,我面对一个;我设置了相同的变量名,这让我疯狂,我必须检查所有的变量名,我必须记住它们。现在我意识到OO不会有问题,因为它们会被隐藏(封装?) 如果不使用OO,我还将面临哪些其他问题?这取决于系统的类型(至少我会说)。如果您正在处理大量的信息,或者正在制作更大的系统,这些系统也应该与未来的PHP项目集成,那么面向对象编程可能是最好的方法 如果你不解释你要做什么,很难说。我也相信这个问题很难给出具体的答案,所以我在这里给出的是一个观点而不是事实。这取决于系统的类型(至少我会说)。如果您正在处理大量的
如果不使用OO,我还将面临哪些其他问题?这取决于系统的类型(至少我会说)。如果您正在处理大量的信息,或者正在制作更大的系统,这些系统也应该与未来的PHP项目集成,那么面向对象编程可能是最好的方法
如果你不解释你要做什么,很难说。我也相信这个问题很难给出具体的答案,所以我在这里给出的是一个观点而不是事实。这取决于系统的类型(至少我会说)。如果您正在处理大量的信息,或者正在制作更大的系统,这些系统也应该与未来的PHP项目集成,那么面向对象编程可能是最好的方法
如果你不解释你要做什么,很难说。我也相信这个问题很难给出具体的答案,所以我在这里给出的是一个观点而不是事实。面向对象的主要观点是将属于一起的东西打包在一起。请参见此存储和输出客户数据的简单示例:
$customers = array(
array('id' => 1, 'firstname' => 'John', 'lastname' => 'Doe', 'address' => 'Foobar Lane', …),
array('id' => 2, 'firstname' => 'Jane', 'lastname' => 'Dough', 'address' => 'Foobar Road', …)
);
function output_customer_name($customer) {
return $customer['firstname'] . ' ' . $customer['lastname'];
}
function output_customer_address($customer) {
return $customer['address'] . ', ' . $customer['state'] . ', ' . $customer['country'];
}
foreach ($customers as $customer) {
echo output_customer_name($customer);
echo output_customer_address($customer);
}
您需要为要输出的关于客户的每种类型的数据声明不同的函数(这只是一个简单的示例,输出可能要复杂得多)。想象一下,你不仅有客户,还有产品。现在您还有output\u product\u name
和output\u product\u description
功能。但是,您的数据结构($customer
数组)没有很好地定义。您可以随时更改它,如果您忘记更新输出函数,则会中断所有输出函数。您还可能意外地将$product
输入到output\u customer\u name
函数中,这会破坏一切
输入OOP:
class Customer {
protected $firstname;
protected $lastname;
protected $address;
…
public function __construct($firstname, $lastname, $address, …) {
$this->firstname = $firstname;
$this->lastname = $lastname;
$this->address = $address;
…
}
public function name() {
return $this->firstname . ' ' . $this->lastname;
}
public function address() {
return $this->address . ', ' . $this->state . ', ' . $this->country;
}
}
$customers[] = new Customer('John', 'Doe', 'Foobar Lane', …);
$customers[] = new Customer('Jane', 'Dough', 'Foobar Road', …);
foreach ($customers as $customer) {
echo $customer->name();
echo $customer->address();
}
您的数据结构和应该使用它们的函数被捆绑到一个对象中。您不可能将$产品
输入到本应输出客户的函数中。您的函数名也要短得多,并且您的名称空间不会被无数函数弄得杂乱无章。您没有在每次将数据分配到数据结构时键入数组键的风险('John'
到$firstname
)。与客户打交道的复杂性已全部打包到对象中。与过程方法相反,在过程方法中,数据结构、函数以及处理两者的过程都同样复杂且容易出错。在OOP中,对象是复杂的,但是处理对象的代码非常简单,几乎不可能犯任何错误
这只是一个非常简单的例子。项目越复杂,与松散结构的函数和变量相比,正确结构的对象带来的好处就越多。复杂性并不是均匀地分布在整个代码库中,而是捆绑在对象中。由于对象外部的代码已经简化,这些对象本身可以成为更复杂代码的一部分,而不会随着您引入的每个新实体(产品、客户)而使整个代码库的复杂性呈指数级增长。这一切都是为了让你更难自食其力,让你的代码更具可读性和更好的结构。封装、抽象等是将相关事物捆绑在一起的自然副作用。它们使您能够编写更简单的代码,而这反过来又使您能够编写更复杂的代码,而不会头脑发热
用过程代码编写复杂的应用程序是完全可能的。但在现实中,情况发生了变化。即使您是一个天才,可以事先规划应用程序的整个结构,需求也会发生变化。随着时间的推移,您需要扩展、更改和维护代码库。与使用包含单个变量和函数的Rube Goldberg机器相比,使用正确结构、抽象、封装和类型检查的代码要容易得多。OO的要点是将属于一起的东西打包在一起。请参见此存储和输出客户数据的简单示例:
$customers = array(
array('id' => 1, 'firstname' => 'John', 'lastname' => 'Doe', 'address' => 'Foobar Lane', …),
array('id' => 2, 'firstname' => 'Jane', 'lastname' => 'Dough', 'address' => 'Foobar Road', …)
);
function output_customer_name($customer) {
return $customer['firstname'] . ' ' . $customer['lastname'];
}
function output_customer_address($customer) {
return $customer['address'] . ', ' . $customer['state'] . ', ' . $customer['country'];
}
foreach ($customers as $customer) {
echo output_customer_name($customer);
echo output_customer_address($customer);
}
您需要为要输出的关于客户的每种类型的数据声明不同的函数(这只是一个简单的示例,输出可能要复杂得多)。想象一下,你不仅有客户,还有产品。现在您还有output\u product\u name
和output\u product\u description
功能。但是,您的数据结构($customer
数组)没有很好地定义。您可以随时更改它,如果您忘记更新输出函数,则会中断所有输出函数。您还可能意外地将$product
输入到output\u customer\u name
函数中,这会破坏一切
输入OOP:
class Customer {
protected $firstname;
protected $lastname;
protected $address;
…
public function __construct($firstname, $lastname, $address, …) {
$this->firstname = $firstname;
$this->lastname = $lastname;
$this->address = $address;
…
}
public function name() {
return $this->firstname . ' ' . $this->lastname;
}
public function address() {
return $this->address . ', ' . $this->state . ', ' . $this->country;
}
}
$customers[] = new Customer('John', 'Doe', 'Foobar Lane', …);
$customers[] = new Customer('Jane', 'Dough', 'Foobar Road', …);
foreach ($customers as $customer) {
echo $customer->name();
echo $customer->address();
}
您的数据结构和应该使用它们的函数被捆绑到一个对象中。您不可能将$产品
输入到本应输出客户的函数中。您的函数名也要短得多,并且您的名称空间不会被无数函数弄得杂乱无章。您没有在每次将数据分配到数据结构时键入数组键的风险('John'
到$firstname
)。与客户打交道的复杂性已全部打包到对象中。与过程方法相反,在过程方法中,数据结构、函数以及处理两者的过程都同样复杂且容易出错。在OOP中,对象是复杂的,但是处理对象的代码非常简单,几乎不可能犯任何错误
这只是一个非常简单的例子。更多公司