想问问关于php OOP的概念,厘清一些不懂的部分

火爆浪子
  • 2.8k

我最近看了很多OOP对于mysqli的教学(或是PDO),发现简直是新世界。我现在连线资料库和语句的方式是在每个网页上引入一个大的php档案,包括连接,而里面有很多小的php档案,可能是功能,或是mysql语句,并用开关去设定哪一个页面才会使用到。直到认识了OOP之后,发现有很多程式可以优化,只是心中产生了很多很多问题
我想将旧有的写法换成新的,只是不知道从何下手,看来有很多需要改进.....
包括我的css,js都是用一个php档案去引入
所以每个网页上会有至少两个引入,一个可能是header.php一个就是是footer.php
而在这里面放了很多有的没的php ...这样至少可以确保每一个页面都可以同步到,但我不确定这样写对不对...有用到的功能再引入,没用到的就不引入...? ......等等

  1. php跟html分开,这是怎样样的一个概念?
  2. 我目前没有使用框架,所以现在网站的写法是旧的,碍于时间压力,不可能打掉重练,但至少我想将框架的逻辑慢慢地改到现在的网站上,我想到的第一个就是连接资料库互动了,以往我是上面宣告语句,下面是while($ row = mysqli_fetch ....的写法将资料捞出,几乎会附带html在里面,而不是纯粹的json格式,想问问这种方式能如何灌入OOP的概念,进行改进?
  3. 我看了不少OOP的影片教学,每个人OOP mysqli写法几乎不相同,我想确定的是大大们是怎样的写法?我只想找到一个最安全的写法...(我的目标是让其他人也看得懂我的代碼)
  4. 有用到的类功能再引入,没有用到就不引入,于是我找到了命名空间的概念,但我始终仍是不懂这个运动逻辑,即便有看了实时编码,却不知道怎么套待到现在的旧有写法,不晓得有没有大大有推荐或经验的取代写法?

我发现功能变多,每一页要引入那页用不到功能想一想也不太对....切换越多..也越来越丑....所以我决定发文问问看大神们的经验....感谢各位的分享,万分感激

回复
阅读 2.6k
6 个回答
白雪炊烟
  • 304
✓ 已被采纳
  1. PDO:其实呢就是一个操作的封装,原来用php连接mysql,nosql···这些数据库,你得挨个查各自的api,然后自己拼sql语句,其中还有转义,过滤等安全性的东西。而pdo呢他把所有数据库的接口抽象出来了,你就不用直接接触数据库了,而且它也把大多数安全操作都做了,所以编码强度暴降。当然还是需要懂一些数据库的知识的。然后你如果想把原来的代码改成pdo的,那得看你以前代码的水平了,如果设计的好了,可能就几个函数,如果设计的不好,每个页面都需要改,这就得自己衡量一下成本和收益的比例了。如果是我,那我宁愿推到重来。
  2. 模板引擎(php和html分离):其实没有分离,它也是把具体的操作封装了,简单点理解的话就是比如你有一个$xxx的变量,然后html文件里面写了一个{$xxx},那它会读取对应html文件的内容把所有的{$xxx}换成$xxx的值,当然具体的肯定比这复杂,具体的你可以了解一下MVC的思想
  3. 命名空间:我特意查了一下资料,命名空间这个概念在php5.3以后就有了,这个概念解释起来很长,简单点理解你把他当成php实现的一个目录就好了,就是原来要引入一个文件你可能需要根据相对路径或者绝对路径找到它,现在这个路径换成命名空间了

建议

  1. 看一些书,比如楼上推荐的《php之道》
  2. 没事看一下php的官方文档hhttp://php.net/manual/zh/,大部分是中文了,少部分英文也不难
  3. 你要的PDO或者模板引擎你都可以去composer上找一下,都有比较好的解决方案,应该也有中文的;PDO一般我是框架内置什么我用什么,自己也写过一些简单的,但是难登大雅之堂,所以无法给你推荐;模板引擎方面SmartyTwig都是不错的,推荐Twig
  4. 日常练手无所谓,但是写项目还是用一下框架吧,会省好多事,而且对于代码的传承来说也比较有利

微薄浅见,如有错误,欢迎指正

唯一丶
  • 17.4k

另外 如果愿意的话可以去了解一下《PHP之道》这个项目和发起者著的一本书 《Modern PHP》 售价也不贵,值得拜读。


8102年了 如果你不是做命令行应用,还没不了解PHP和HTML分离。
那你这个PHP基本也就是白学了。

尽早学会使用框架 你会打开新世界的大门

每个人都有自己的编程风格,现在建议直接使用 PDO 而不是MySQLi。

8102年了,你得学会用现代化包管理工具(composer)来管理你得包。应该完全了解 PSR 1/2/4 。3份推荐标准。

1、其实没有PHP和HTML分开这种概念,在view这一层你也可以用PHP+HTML来写,要分开的是view和业务逻辑。用输出控制函数+extract就能简单地把view文件跟你的业务逻辑分隔开。

function render($view, $data = []) {
    extract($data);
    ob_start();
    include $view;
    return ob_get_clean();
}

echo render('template.html', ['foo' => 'bar']);

2、改用PDO就好了
3、和第二点一样
4、你这里提到的应该是自动加载,它跟命名空间没有关系,只不过按照一些约定,一般习惯把命名空间跟文件路径映射起来。如果你没有用到命名空间,那也可以实现自动加载,只要你找到你的类名称和类定义文件路径之间的关系就行。譬如你的类名是Foo_Bar,那这个类就可以定义在foo/bar.php,你只需要注册一个处理自动加载的函数就行

spl_autoload_register(function($className) {
    require strtolower(implode('/', explode('_', $className))) . '.php';
});

从提问来看,应该是刚接触php,建议直接看一个框架怎么用,很多东西就明白了。如果时间紧,先看怎么用。写多了,自己就明白什么OOP,mvc了。
1、php跟html分开,主要是用php处理业务,html做界面显示,避免在html文件中嵌入过多的逻辑。
2、最好的办法是新功能直接用框架写,旧功能慢慢迁移过去,而不是只改数据库连接部分。
3、文件引入目前都是使用命名空间,composer引入。需要的页面use文件即可。命名空间只不过是一种引入方式,底层通过autoload寻找到文件,执行include方法。
4、如果还是选用现有方式,做好代码组织,不要把所有东西写在一个文件,功能越细,引入的无用的东西就越少,但是太细也会导致引入文件多。所以要找到平衡,合理规划每个文件功能。

看到邀请,我来回答一下吧,关于你这个问题,一句两句解释不通,我在这里大致说一下学习方案,你可以参考这个方案进行学习,另外我针对面向对象的一些东西来做一下讲解。

首先你提到一个关于命名空间的问题,命名空间是管理程序的方式,但是具体怎么实现命名空间的程序加载,还是需要自己写autoload函数来实现。

关于面向对象的话你可以针对性的去学习,学习完面向对象的思想基本上对命名空间的疑问也就没有了。

然后关于MVC,其实是一种程序编写思想,包含三个方面:

  1. 模型用来处理具体的程序逻辑,模型里的逻辑会返回一个最终要进行渲染界面的数据结构;
  2. 控制器主要处理基础的数据输入以及把模型里得到的数据放到视图模板里进行渲染;
  3. 视图主要控制程序渲染,不会存在具体的程序逻辑,最多有个foreach把数据遍历出来进行输出,所以视图层主要关注的是布局逻辑,不会关注具体的程序逻辑;

当然这么说可能对你来说还是不太理解,总之,html对于PHP来说就是个字符串;

其他的话可以参考PHP官方文档,读一遍,写一遍。

分离之后的模板看上去是分开写的,其实是被模板引擎解析了特定的标识!
你可以去看看 Smarty php大多数都是写服务或者接口 不处理关于视图的东西! 除去小型网站...
如果真的想了解模板引擎就去找个视频吧,也不难 就是正则匹配替换
至于PDO 就是将数据库的操作封装了

宣传栏