繁体   English   中英

Object 面向命名约定

[英]Object Oriented Naming Conventions

使用附加到对象的方法构建代码的名称是什么?

例如:

" ... ".trim 

或者

obj.method()

起初,许多人会争辩说这是面向 Object 的,但php是面向 Object 的(以及部分trim("... ") ,但它的语法完全不同。

TL;DR“面向对象”和“一切都是对象”不是有效的答案,除非......

人们不断建议 PHP 是“面向对象”而库是“面向对象”,然而 PHP 库的代码通常由大量的 static 类构成。

例如红豆:

  • R::dispense($bean)
  • R::store($bean)
  • R::垃圾($豆)

这不遵循obj.method语法,但据说是面向 Object 的。 PHP 的 object 方向是否具有误导性,或者obj.method()编码风格是否有更好的名称。

PHP 两者都可以。 您可以编写面向 object 的代码,也可以编写程序代码。 过程代码更容易理解和编写,大多数 PHP 程序员并不真正了解 OOP,所以他们编写,我称之为伪装成 OOP 的过程代码。 这包括诸如 static 方法和单例之类的东西。

PHP 的许多核心功能都是 C 的遗产,所以如果它不遵循 OOP 约定,请不要感到惊讶。

重要的是,在对象上调用方法确实遵循 OOP 约定。

PHP 中的字符串不被视为对象,而是标量值。 因此,除非首先将标量字符串文字转换为 object,否则语法"..."->trim()无法工作。

有一个关于自动装箱(将标量值自动转换为对象)的公开提议。 这将允许通常的 object 面向语法。 然而,自动装箱确实有一点性能损失。 在这里查看更多:

https://wiki.php.net/rfc/autoboxing

对于 RedBeanPHP,我使用 static 方法作为外观。 这比纯粹的 OO 代码更加用户友好。 您不必了解 RedBeanPHP 的所有内部结构就可以使用它(还有一种 OO 方式来使用 lib)。 在我看来,RedBeanPHP 真的是面向 object 的; 在门面后面,它使用 inheritance、接口、多态性和适配器、工厂、观察者等模式。

另外,我相信 OOP 更像是一种思维方式,而不仅仅是一种语法。 例如,您也可以使用结构和 function 指针或像 GTK 那样来制作面向 object 的系统。 OOP 语言中的功能只是为了方便。 此外,由于 PHP 是一种动态语言(与 static 类型相比),它不必依赖类型,它可以只扫描对象以获得所需的行为。 在我看来,这是一件好事,因为它更灵活,更易于维护,比如 Java 中的深层 class 层次结构。 我曾经是一个 OO 纯粹主义者,但我最近接受了 OOP 实用主义; 只需使用两全其美。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM