Tag: oop

PHP接口是否有属性?

PHP中的接口是否有属性,还是只有方法?

如何检查名称空间内是否存在类?

我有这个: use XXX\Driver\Driver; … var_dump(class_exists('Driver')); // false $driver = new Driver(); // prints 123123123 since I put an echo in the constructor of this class exit; 那么…这种行为是非常不合理的(创build根据PHP的类的对象不存在)。 有什么办法来检查一个类是否存在于给定的命名空间下?

如何理解松耦合应用程序中的大局?

我们一直在使用松耦合和dependency injection开发代码。 很多“服务”风格的类有一个构造函数和一个实现接口的方法。 每个单独的课程都很容易理解。 但是,由于耦合的松散,查看课程并不能告诉你周围的课程或者它适合放大图片的地方。 使用Eclipse跳转到协作者并不容易,因为您必须通过接口进行操作。 如果界面是可运行的,那么对于find哪个类实际插入没有任何帮助。实际上,有必要回到DI容器定义,并尝试从那里解决问题。 以下是一个从dependency injection服务类的代码行: // myExpiryCutoffDateService was injected, Date cutoff = myExpiryCutoffDateService.get(); 这里的耦合尽可能松散。 到期date以任何方式字面上实施。 以下是在一个更加耦合的应用程序中可能看起来像什么。 ExpiryDateService = new ExpiryDateService(); Date cutoff = getCutoffDate( databaseConnection, paymentInstrument ); 从紧密耦合的版本,我可以推断,截止date是由支付工具使用数据库连接以某种方式确定。 我发现第一种风格的代码比第二种风格的代码更难理解。 你可能会争辩说,在阅读这门课时,我不需要知道截止date是如何计算出来的。 确实如此,但是如果我正在缩小一个bug或者确定增强需要插入的位置,那么这是非常有用的信息。 有谁遇到这个问题? 你有什么解决scheme? 这只是一些适应? 是否有任何工具可以让class级连线的方式可视化? 我应该让课程更大还是更融合? (有意留下这个问题容器不可知的,因为我有兴趣在任何答案)。

抽象类与接口与mixins类

有人可以向我解释抽象类 , 接口和mixins之间的区别吗? 我以前在我的代码中使用过,但我不知道技术上的差异。

从常规方法调用协议默认实现

我想知道是否有可能实现这样的事情。 我有这样一个游乐场: protocol Foo { func testPrint() } extension Foo { func testPrint() { print("Protocol extension call") } } struct Bar: Foo { func testPrint() { // Calling self or super go call default implementation self.testPrint() print("Call from struct") } } let sth = Bar() sth.testPrint() 我可以提供extension的默认实现,但是如果Bar需要默认实现中的所有内容以及其他内容呢? 这跟调用super.很像super. 在class上实施各种财产的要求等,但我认为没有可能达到与structs相同。

工厂class

就我个人而言,我从来没有理解过工厂类的想法,因为直接实例化一个对象似乎更为有用。 我的问题很简单,在什么情况下使用工厂类模式是最好的select,什么原因,以及一个好的工厂类是什么样的?

一个接口应该inheritance另一个接口

我似乎无法find答案,只是想确保这是一个好的编码标准。 我有接口A被许多不同的类使用,不希望接口A改变。 我遇到了一个新的需求,需要实现接口A的许多类需要枚举,但并不是所有的类都需要这个枚举。 我不希望那些不需要这个新枚举的类来实现这个新的function。 所以我创build了接口B,其中包含我需要添加的新枚举。 然后我做了接口Binheritance接口A,这是我的关注,一个接口inheritance另一个接口可以吗? 为了继续我的更改,我将需要新枚举的类更改为实现接口B而不是接口A,因为它是由接口Binheritance的。我想在我的类中实现两个接口,但需要它们,但是我使用在整个代码的接口,并希望只使用一个接口来查看类而不是两个。 我希望这已经足够清楚了(可能会很长),但如果任何人都可以给我一些build议,无论我做对了还是我做错了,请让我知道。 谢谢!

当一个接口从另一个接口“inheritance”时,你称之为什么?

如果我有Bclass:A {} 我说“B类inheritance了 A类”或“B类来自A类”。 但是,如果我有: class B : ISomeInterface {} 说“BinheritanceISomeInterface”是错误的 – 正确的说法是说“B 实现 ISomeInterface”。 但是,说我有 interface ISomeInterface : ISomeOtherInterface {} 现在说“inherits”仍然是错误的,但是由于ISomeInterface没有实现任何东西,现在说“实现”也是错误的。 那么,你称之为什么关系?

OOP接口和FPtypes之间的区别

可能重复: Java的接口和Haskell的types类:差异和相似之处? 当我开始学习Haskell时,我被告知types类比接口更强大/不同。 一年以后,我已经广泛地使用了接口和types类,我还没有看到一个例子或解释,他们是如何不同。 这不是一个自然而然的启示,我错过了一些显而易见的事实,或者实际上并没有真正的区别。 search互联网并没有带来任何实质性的进展。 所以呢,你有答案吗?

什么时候应该把方法变为私有?

有很多时候我不确定一个特定的方法是否应该被私人化。 例如,我正在build立一个类,它负责生成一个报告。 这个类有一个buildReport方法和几个为buildReport收集必要数据的方法。 // single public method // uses a set of helper methods public buildReport() // helper methods private avgSurveyTime() private fetchVendors() private fetchSendCounts() private … 我在辩论是否应该公开这些辅助方法。 我真正计划在外面调用的唯一方法是buildReport() 。 但是,使用fetchVendors()等方法获取供应商列表可能会很有用。 我看到这样两个思想stream派:你总是可以尽可能less地暴露。 (在这种情况下,我的许多类只能有一个公共方法),或者你可以公开所有可能对class级用户有用的东西。 是否有一个好的经验法则来决定什么时候应该公开/私有的方法?