Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 应该或不应该';我们不能在模型中使用参数吗?_Php_Model View Controller_Oop - Fatal编程技术网

Php 应该或不应该';我们不能在模型中使用参数吗?

Php 应该或不应该';我们不能在模型中使用参数吗?,php,model-view-controller,oop,Php,Model View Controller,Oop,我正在测试CodeIgniter的一些功能,我注意到CodeIgniter并没有提供一种让用户在模型的构造函数中设置参数的方法。 然后我搜索了一下,发现有人发现在模型中使用构造函数是没有用的。为什么呢 我喜欢做以下事情: $user = new User(123); // 123 = id $user->getName(); 或者类似的模型。但现在我们不应该为它们使用构造函数 为什么我们应该或者不应该为模型类使用参数?我不想再提了,因为我对CodeIgnitor一无所知,但我知道为什么大

我正在测试CodeIgniter的一些功能,我注意到CodeIgniter并没有提供一种让用户在模型的构造函数中设置参数的方法。 然后我搜索了一下,发现有人发现在模型中使用构造函数是没有用的。为什么呢

我喜欢做以下事情:

$user = new User(123); // 123 = id
$user->getName();
或者类似的模型。但现在我们不应该为它们使用构造函数


为什么我们应该或者不应该为模型类使用参数?

我不想再提了,因为我对CodeIgnitor一无所知,但我知道为什么大多数模型通常采用无构造函数的模式

原因是序列化和反序列化。许多语言(例如Vb.net和C#)不允许基于启用构造函数的类进行序列化。因为,当反序列化已序列化的类时,它必须通过构造函数,这在反序列化过程中是不可能的,因为它不是常规代码路径的一部分

我的猜测是,CodeIgnitor也会发生同样的事情,他们决定删除构造函数以达到类似的目的,即使PHP中有神奇的唤醒


我觉得这很有道理,是吗?

对不起,你说的序列化是什么意思?我从未听说过它。序列化是将一个对象或一些不太复杂的数据(如数组)转换为字符串或二进制字符串的过程,然后可以反序列化回对象/数组或任何其他资源。在PHP中,只能序列化PHP数据,所以对象、数组和标量数据。无法序列化资源,因为它们是特定扩展的上下文。这与模型有什么关系?我仍然不明白。模型代表的是来自一个源的原始数据,不一定来自数据库,它可以来自XML文件、二进制文件(如jpeg或gif)、web服务(Soap XML)或任何其他常见格式。因此,您需要一种方法,在大多数情况下,能够将对象中的数据序列化和反序列化到另一种格式。对于数据库,我们通常采用粗略的方式,选择数据并将列复制到属性中,但是对于外部文件或源,通常使用序列化和反序列化。。。