如果不使用OO-PHP,我将面临哪些问题?

如果不使用OO-PHP,我将面临哪些问题?,php,oop,Php,Oop,我面对一个;我设置了相同的变量名,这让我疯狂,我必须检查所有的变量名,我必须记住它们。现在我意识到OO不会有问题,因为它们会被隐藏(封装?) 如果不使用OO,我还将面临哪些其他问题?这取决于系统的类型(至少我会说)。如果您正在处理大量的信息,或者正在制作更大的系统,这些系统也应该与未来的PHP项目集成,那么面向对象编程可能是最好的方法 如果你不解释你要做什么,很难说。我也相信这个问题很难给出具体的答案,所以我在这里给出的是一个观点而不是事实。这取决于系统的类型(至少我会说)。如果您正在处理大量的

我面对一个;我设置了相同的变量名,这让我疯狂,我必须检查所有的变量名,我必须记住它们。现在我意识到OO不会有问题,因为它们会被隐藏(封装?)


如果不使用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中,对象是复杂的,但是处理对象的代码非常简单,几乎不可能犯任何错误

这只是一个非常简单的例子。更多公司