加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 22:18:22 所属栏目:PHP教程 来源:网络整理
导读:最近,我自己尝试学习OO编程.从我开始大约3个月后,我想我可能会忽略这一点,因为我似乎更喜欢静态方法(对我来说似乎更容易). 例 以下是我的代码中典型的数据库查询. $bindings = array(':name'=$articleName);Db::query('SELECT id,name,title,image,content F
最近,我自己尝试学习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 = '<img alt="' . $this->getTitle() . '" src="' . '' . $image['src'] . '" width="' . $image['width'] . '" height="' . $image['height'] . '" />';

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

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

$db = new Db();

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

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

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

更新

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

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

解决方法

嗯,imho PHP是一个不好的例子,因为 PHP is not object-oriented.是的它有对象.是的,他们支持继承和所有这些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请求生命周期(是的,我知道你可以从命令行运行它,但这不是绝大多数用户所做的)并且它非常擅长于它的设计工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读