Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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_Design Patterns_Frameworks_Php 5.3 - Fatal编程技术网

Php 如何在框架中扩展核心类

Php 如何在框架中扩展核心类,php,design-patterns,frameworks,php-5.3,Php,Design Patterns,Frameworks,Php 5.3,我一直在使用我自己的makePHP5.3Web应用程序框架,我必须说,使用它是一件非常愉快的事情。实际上,我在想,用它来开放源代码,让其他人感受到与我一样的快乐;) 这是我的问题。所有核心类都必须是可扩展的,这有多重要?实现这一点的好方法是什么?Codeigniter在任何地方都使用单例模式,这是不可能的。Kohanas文件系统很好,但根据我的口味,它包含了许多文件(空类)的方式 我从未使用过Symfony,但听说它利用了依赖注入?我不是这方面的大师,但我有一些知识。这是路吗?有“更聪明”的方法

我一直在使用我自己的makePHP5.3Web应用程序框架,我必须说,使用它是一件非常愉快的事情。实际上,我在想,用它来开放源代码,让其他人感受到与我一样的快乐;)

这是我的问题。所有核心类都必须是可扩展的,这有多重要?实现这一点的好方法是什么?Codeigniter在任何地方都使用单例模式,这是不可能的。Kohanas文件系统很好,但根据我的口味,它包含了许多文件(空类)的方式

我从未使用过Symfony,但听说它利用了依赖注入?我不是这方面的大师,但我有一些知识。这是路吗?有“更聪明”的方法吗

另外,我正在使用PHP5.3和名称空间、闭包等


/Tobias(开发中的瑞典人)

我非常喜欢Zend框架的工作方式:主要有一个抽象类(用于扩展)和一个具体类(用于具体用例),例如Db Mapper:

您可以扩展Zend_Db_Table_抽象类:

class Bugs extends Zend_Db_Table_Abstract
{
    protected $_name = 'bugs';
}
或者,如果您只需要简单的函数,可以通过以下方式创建新的Db表对象:

$bugTable = new Zend_Db_Table('bug'); 
// Zend_Db_Table extends Zend_Db_Table_Abstract
因此,您必须为解决方案中的每种类型创建两个类:抽象类和具体类

更多信息: 我想看看,而且,我认为它们在设计方面是最好的。我建议不要使用单例,而是使用依赖注入

所有核心类都必须是可扩展的,这有多重要?实现这一点的好方法是什么

这真的取决于班级的职责。您可能不希望MVC堆栈中的一些核心组件(假设是MVC)被扩展,您可以将它们声明为final,或者将某些方法声明为final,并通过插件和助手强制扩展。其他类可能被设计为扩展类,在这种情况下,它们应该被声明为抽象类

在我看来,您应该主要使用受保护的属性并提供访问器方法。但不要只在你所有的财产上使用受保护的可见性,有些财产是公共的和私人的也没关系,这一切都归结于责任

考虑到一个类有多大的责任,如果它服务于多个角色/目的,那么是时候重构该类并将其拆分为太多或更多的类了。别忘了使用接口

实际上,我在想,用它来开放源代码,让其他人感受到与我一样的快乐;)

在您发布代码之前,请考虑以下内容:

  • 我所有的代码都经过单元测试了吗
  • 我是否使用版本控制
  • 我有完整的API文档吗
我不想让人沮丧,但如果你对这些问题中的任何一个都回答“不”,那么就不要为正确地开源代码而烦恼,因为没有人会使用它。也许只是开始使用GitHub进行SCM。也要考虑到已经存在了大量的顶级框架,为什么他们会使用你的替代品?

也一定要阅读


…我只是想避免你在你的项目中投入额外的、不必要的精力供公众使用,而你无论如何也得不到任何支持。

我明白你的意思,但读起来很令人沮丧。希望我们还有一些“改革者”留下来,这样新的开源项目就出现了:/我看了Symfony2,Li3,相信依赖注入是一条路要走。我已经开始集成它,它看起来相当不错。:)谢谢你的回答Tobias别担心,大多数开发人员都会不断地经历这个阶段,我也曾经经历过,而且可能在某个阶段还会经历。这很令人沮丧,但这是事实。正如我所说的,如果你想要操作系统,你的项目只需要开始使用GitHub,但不要为你的框架建立专门的网站。Fabien Povertier做了一个很好的DI容器:你应该检查一下。