Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.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_Class_Object - Fatal编程技术网

如果找不到方法,我可以让PHP对象运行代码吗?

如果找不到方法,我可以让PHP对象运行代码吗?,php,class,object,Php,Class,Object,我有一个主类,DBAPI,它包含与数据库的所有交互。它本身不是单例的,但被设计为只作为$DBAPI实例化一次 当我修改数据库时,我显然必须向DBAPI中添加函数,以便让站点使用新功能,但是,由于可以采取很多不同的操作,而不是将所有内容都包含在一个大型类文件中,我已经将它们按功能/权限级别划分为特征,通过添加基于权限级别(只读、读写等)标记的特征,动态创建DBAPI类文件。由于唯一需要创建文件的时间是添加新特性时,因此我仅在特定用户权限级别不存在类文件时创建该类文件,否则我使用已生成的文件。(如果

我有一个主类,
DBAPI
,它包含与数据库的所有交互。它本身不是单例的,但被设计为只作为
$DBAPI
实例化一次

当我修改数据库时,我显然必须向
DBAPI
中添加函数,以便让站点使用新功能,但是,由于可以采取很多不同的操作,而不是将所有内容都包含在一个大型类文件中,我已经将它们按功能/权限级别划分为特征,通过添加基于权限级别(只读、读写等)标记的特征,动态创建
DBAPI
类文件。由于唯一需要创建文件的时间是添加新特性时,因此我仅在特定用户权限级别不存在类文件时创建该类文件,否则我使用已生成的文件。(如果有更好的办法,我洗耳恭听)

我现在遇到的问题是,如果我在一个新的trait中添加一些函数,以前生成的类显然没有意识到这一点,直到我尝试在代码中的某个地方使用该函数,但失败了,我才发现这一点。围绕每个函数调用编写包装是毫无意义的,首先要检查它是否是函数-如果代码试图访问找不到的方法,是否有办法让
DBAPI
类执行一些操作?

例如,如果代码调用某个函数
$DBAPI->newfunction()
$DBAPI本身处理异常,运行一些试图更新自身的代码,如果可以找到,这将导致newfunction()运行。

(注意,这种体系结构有一种非常糟糕的代码味道。我确信有更好的方法可以做到这一点。)

PHP类可以实现在没有匹配方法名称时使用的

function __call( $name, $arguments ) {
    // Code to run...
}

这正是我要找的。我不知道该如何处理代码体系结构,但是…@serakfalcon体系结构的一个选项是使用多个类,每个类表示对数据库中某种类型的项的访问或某种级别的权限。你可以一直遵循这个原则,直到一个成熟的团队,但你不一定需要它。可能更简单,您可以创建一个包含核心数据库内容的类,并为每种类型的数据对其进行子类化,然后使用子类进行数据访问,而不是使用单一的单片
DBAPI
类。好的,这是一个很好的建议,我必须考虑如何做到这一点。我肯定不需要这个项目的ORM,但显然需要介于ORM和直接运行查询之间的东西。