我有一个数组数组。每个单独的数组(可能包含一些其他数组)保存表单元素的数据,也可能包含一些额外信息。表单输入名称是数据库字段的名称。所以,现在我可以将这个数组作为单个参数传递给我的程序中的各种函数,例如showForm(),createTable(),validateForm()等等。我可以在组织数组时对不同的网站使用这些相同的函数同样在网站之间。
我想移动到Objects来包含我的数据,并且可以看到几个优点。但是,我担心我最终会遇到很多对象。假设一个表单有20个输入元素我将有20个对象而不是一个20个数组的数组。所以,我必须传递20个参数,而不是只传递一个上述所有函数。
我认为我遗漏了面向对象编程的一些东西。我希望能够从一个类中创建一组完整的对象,然后将它们作为一组对象一起处理,而不是单独处理它们。
非常感谢对此的任何见解。
答案 0 :(得分:3)
面向对象编程的主要优点是对象封装了数据(=字段,通常在PHP上下文中称为“属性”)以及处理该数据的行为(=方法)。通常,对象类是基于应用程序正在使用的“域概念”定义的(=对象所代表的实际现实事物,例如客户,销售订单,电子商务应用程序中的销售项目) )。
如果您当前正在使用数组数组,并且数组中的所有数组都是相同类型的事物,您可以切换到对象数组,如上面其他人所建议的那样。如果你有一个函数处理一个对象数组,你可以使用foreach
轻松地对数组中的每个对象执行一些操作,例如:
foreach ($object_array as $object) {
perform_some_operation($object);
}
但是,只有在将该操作定义为该类的方法时才会释放OOP的实际功能(例如,请参阅this intro on OOP in PHP)。这将允许您将上述内容重写为:
foreach ($object_array as $object) {
$object->perform_some_operation();
}
这再次打开了进一步重构为真实面向对象应用程序的大门。然而,正如其他人在上面提到的那样,如果您的应用程序相对较小,如果您只想将多个值组合在一起等,那么将“真正的”OOP引入您的PHP应用程序可能不值得.PHP支持轻量级方式将值分组到对象中,如下所述。
动态创建对象
如果您只想将多个值组合在一起,但希望避免为此目的使用数组,则可以使用PHP的通用stdClass
类,结合PHP的字段可以{ {3}}。例如:
// Defining a group of values as an array:
$my_person_arr = array('John', 'Doe', 21);
// Defining a group of values by adding fields dynamically to a stdClass object:
$my_person_obj = new stdClass();
$my_person_obj->Forename = 'John'; // Creates and sets a field named 'Forename'
$my_person_obj->Surname = 'Doe';
$my_person_obj->Age = 21;
例如,如果您使用defined dynamically代替$my_person_obj->Surname
,则可以将此人的姓氏设为$my_person_arr[2]
而不是$my_person_arr['Surname']
(或{{1}}常规索引数组。)
当然,这只是一种分组值的便捷方式,并没有利用OOP的实际功能。