当前位置:  开发笔记 > 编程语言 > 正文

我是否错过了面向对象编程的观点?

如何解决《我是否错过了面向对象编程的观点?》经验,为你挑选了2个好方法。

最近,我自己尝试学习OO编程.从我开始大约3个月后,我想我可能会忽略这一点,因为我似乎更喜欢静态方法(对我来说似乎更容易).

以下是我的代码中典型的数据库查询.

$bindings = array(':name'=>$articleName);

Db::query('SELECT id, name, title, image, content FROM ' . CONFIG_MYSQL_TABLE_PREFIX . 'articles WHERE name = :name LIMIT 1', $bindings);

以下是我调整/裁剪/缓存图像的方法

$image = Img::thumbnail($imagePath, 200);

$imgHtml = '' . $this->getTitle() . '';

两种静态方法都使用单例模式.第一种方法创建一个PDO对象,第二种方法创建一个我在Google代码上找到的ImageResize类.

如果我真的想把它称为面向对象编程,那么它们应该是2个对象吗?即

$db = new Db();

$image = new Image($src, $width, $height);

每次我用它们?我读过单身人士也是个坏主意,除非他们被用来登录文件.但是,在需要时打开一个数据库连接并且仅在它被使用和完成后才关闭,这不是一个单例吗?

我的问题是,我是否仍然坚持程序性思维模式,如果是这样,我所做的就是不好的做法?我怎样才能沉浸在正确的OO思维模式中?

更新

谢谢你的回答.我确实发现我正在做的原始方法更容易,因为我必须输入更少的代码并让静态方法担心很少的实现.

我会研究另一种语言来掌握OO,但这种语言本身就是另一个问题.



1> cletus..:

好吧,imho PHP是一个不好的例子,因为PHP不是面向对象的.是的它有对象.是的,他们支持继承和所有这些OO原则.它支持对象.有区别.

我这样说是因为PHP默认情况下不存在于请求之间的状态.每个HTTP请求都将从头开始完全重新创建PHP环境(这相当便宜),这意味着请求之间不存在静态数据.您可能会说"会话数据怎么样?" (也许附加一个"哈哈!"),但这也不是PHP意义上的持久性数据.它(通常)存储在文件系统中,并由客户端发送的cookie键入.

为什么我要提这两件事?

因为"全局"范围不像C,Java,C++或其他语言中的全局范围,因为它们倾向于在请求之间保持不变.PHP更像是90年代的CGI编程模型(这不是巧合,因为它起源于此).

因此,您的对象不是真正的全局对象:它们对于为当前请求提供服务的代码的所有部分都是可见的.

对我来说,这远远不够.事实上,我经常觉得这很可以接受.有时它是必要的(例如,如果你想将信息发送回调用者或​​将状态传递给回调而不执行eval()/ create_function()hacks),则回调preg_replace_callback.

关于PHP不是面向对象的观点是因为即使在PHP 5中,OO功能仍然有点"强调",这意味着您可以非常愉快地编写代码并在PHP中编写代码而无需使用它们.这与Java不同,即使您所做的只是在其中编写一堆静态方法,您必须创建一个类.

所以如果你想学习OO,老实说我不会用PHP来做.PHP适用于很多东西,但它的设计目的是拥有一个HTTP请求生命周期(是的,我知道你可以从命令行运行它,但这不是绝大多数用户所做的)并且它非常擅长于它的设计工作.



2> cruizer..:

掌握面向对象编程的最佳方法是考虑将消息相互传递的对象,而不是调用函数的对象.当我学习Smalltalk时,我有这个"尤里卡"的时刻.

有适用于OOP的原则,如"告诉不要问"原则和其他原则.使用您最喜欢的搜索引擎来寻找这些原则.

在我看来,大量静态方法是一种陷入程序性思维模式的迹象.确定有些情况下它们确实有意义但是如果你的代码有更多的静态方法而不是实例方法我会说你不是以OO的方式做事.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有