而这个: ...">

只是不要说你不是那样的人或我对学习的看法

大家好 我想说一下我对现代编程培训的看法。 本文将讨论PHP,框架和自行车。 但是我认为这适用于任何编程语言。 让我们开始吧。


还记得您的第一个PHP代码吗?


不,不是这个:


<? echo "Hello world"; //       index.php :) ?> 

而这个:


 <? include "db.php"; if ($_GET['id'] > 0){ mysql_query("SELECT * FROM `posts` WHERE id = {$_GET['id']}"); }else{ mysql_query("SELECT * FROM `posts` ORDER BY `id` DESC"); } ?> 

随着时间的流逝,我们长大了,对OOP(哈哈)有了一个了解,并且我们开始产生类似于以下内容的东西:


 <?php require "db.php"; if ($_GET['id'] > 0){ $db->query("SELECT * FROM `posts` WHERE id = {$_GET['id']}"); }else{ $db->query("SELECT * FROM `posts` ORDER BY `id` DESC"); } ?> 

然后我们在某处听说无法使用mysql_ *,并且每个人都使用mysqli_ *,因为这样做更酷。 我们重写了代码以使用mysqli。 一段时间后,我们了解了PDO。


同时,我们在每种方法中都使用了全局变量和百行类。 您是否熟悉User类,该类可以注册用户,进行身份验证(是的,当然,授权,我们仍然不知道有什么区别!),恢复密码? 我知道 我们的User类可以编辑任何用户,因为我们对此有一个超级方法:


 // PSR? ,  . class User { public function changeUserProfile($userId, array $userData){ global $db; //    $db->query("UPDATE `user` SET ...."); } public function login($userId){ } public function logout(){ //     <a href="/logout.php"></a> :) } } 

我还开设了Db,Post和Comment类。


我们熟悉SQL注入,XSS攻击和:


  DROP TABLE `posts` 

SOLID,PSR,MVC和模式不只是文字


我们自己走了这条路,了解了SOLID,PSR,MVC。 对我们来说,这些不仅仅是单词,而且是迫切需要,尤其是在可怕的遗产和大量的代码之后,它们的每个类都以自己的风格编写。 我们踩了成千上万的耙子,编写了尽可能多的自行车,结果开始编写或多或少的适当代码。


我们不再在类中使用全局和超全局变量,对于SQL,我们使用准备好的查询,并且不将SQL放入控制器中(我们也不再具有UserModel :: login())。 我们使用DI实现必要的对象,但不要在类中创建它们。 我们驱动请求/响应,而不是回响“ hello world”,我们知道为什么要这样做。 我们不仅使用浏览器测试代码,还编写综合测试。 这个价格是多少? 我小时候有电脑,数十个不眠之夜,许多fakaps和一个损坏的数据库。


而且我也很早就知道为什么$ _POST在模型中不好。


你不是那种人吗 我去过


以前是这样。 但不是现在


到目前为止,我还不了解用于PHP开发课程的新mod是否有害。 一方面,人们可以在短时间内立即学习如何正确地编写代码,但另一方面,人们不理解为什么这是正确的编写方法。 失去了整个知识层,即基础,然后必须迅速弥补这一基础。


现在,他们提供了数十门课程。 在短短的几个小时内,您将学习如何在Laravel,Yii2或任何其他框架中进行编写。 不了解PHP和OOP的基础知识吗? 为您提供PSR Prosto Sdelay Raboty? 没关系,我们会教您,仅售19,990卢布。 一个人付款并认为他会被教导立即正确写作。 你马上写吗?


我开始注意到,由于某种原因,人们停止了对数据库的理解(使用数据库,函数,OOP,启动,反射,使用文件,网络等),他们直接转向了框架。 他们不知道它是如何从内部工作的,他们只是在框架上写东西,而没有帮助。 他们不担心File :: save()的作用,封装的强度是相同的。 这并不有趣。 而且,如果此框架中未包含某些内容,则无法完成此功能。


但是我不同意这种学习方法。 骑自行车是了解任何技术的最佳方式(嗯,它将立即开始)。 在喝咖啡时,我说了一个愚蠢的想法:如果您想了解PHP,请使用插件,权限和外部代码编写CMS。 字段和管理面板。 然后我想。 还是这个想法根本不愚蠢?


通过框架学习如何工作?


因此,我们使用composer create-project ....,然后转到.env,编辑数据库访问权限,然后将控制器类放在这里,将模型类放在这里,将模板类放在这里。 我们似乎已经学过,但是我们不了解它是如何从内部工作的。 有点夸张,但事实是这样。


我遇到了几个说他们在框架上写东西的人。 但与此同时,他们不了解基本知识。 一位认真的人告诉我,他不知道array_map函数。


好吧,我们的自行车会给我们什么?


至少我们会熟悉文件和类的自动加载。 我们了解到可以使用composer完成此操作,而不是编写spl_autoload_ .... 从请求到响应,我们将一路走来。 框架对我们来说是这样的。


是的,几乎所有框架都编写完美。 在学习过程中,您必须注意这些或其他事情的完成情况。 如果您编写“大型框架”,则必须进行逆向工程并了解相同的Yii2或Laravel如何工作。 当您发现Laravel只是一堆组件时,也许您会大吃一惊。 这样做的副作用是对框架及其内部架构的深入了解。 在我看来,在这种模式下,理解变得更快。 至少是我个人。


踏上了所有序幕之后,我们将深入了解为什么使用这些设计方法和模式,尤其是在您需要扩展,维护和测试代码时。


在论坛和社交网络上,他们只讨论自行车不好。 当我在某个站点上谈论某个人谈论其家庭项目的文章时,无论是社交网络,博客还是带有猫目录的站点(由他从头开始或在各个组件上撰写),我都感到很高兴。 一个人可以从基础中学到东西,这很好!


毕竟,还有什么要学习的? 您是否立即开始编写可正常工作且准确无误的代码? 我没有,在意识到发生了什么之前,我写了数千行代码。 虽然也许我听不懂,但在我看来这一切吗?


但是,比起在生产中编写自行车,最好是在家中编写自行车,了解技术,了解什么,甚至在packagist上找到现成的解决方案。


mail.ru上的文章与我很接近: 没有框架的现代PHP ,作者希望在其中展示所有框架的设备以及它们的真正含义。


最近,我的生活中出现了许多2000年代的旧版代码。 该项目是旧的,但很有趣。 还需要将其转移到新的轨道上(如果有意思,我肯定会告诉您)。 它的外观与本文开头的代码大致相同:一个文件中的布局,sql和逻辑。 但是我有一个传统的镜头。 我知道如何与他合作以及如何重构他。 但是一个只能在框架上写作的人会做什么呢?


他只是不会面对这样的项目:)

Source: https://habr.com/ru/post/zh-CN470087/


All Articles