学习

怎么一步步编写简单的PHP的Framework(八)

天涯浪子 提交于 2019-12-10 16:08:42
昨天我写到我们使用前端控制器来控制所有请求,今天我们继续这个话题。 既然前端控制器控制一切,那么我们可以用它来做更多的事情!! 我们知道,在windows里面默认php.ini中display_errors默认开启,而在linux中默认是关闭的,那么这样对于程序的调试时很麻烦的,所以我们可以在配置文件中设置一个debug属性,它代表是否调试打开,如果打开调试,程序出现任何异常,那么会输出很多调试信息。在这儿,我只是很简单的设置一下,真正的框架调试功能肯定不是这样简单的。 先我们实现如果debug开启,那么显示调试信息debug mode:这样一个字符串,并且如果程序有语法或其他错误,显示错误信息,如果调试关闭,那么任何错误信息都不显示。 现在修改FrontController的__construct函数: private function __construct() { C(Config::factory(Config::PHP)); //写入配置信息 session_start(); if(true === C('debug')) { echo 'debug mode:'; ini_set('display_errors','On'); error_reporting(C('errorReporting')); } else { error_reporting(0); ini

怎么一步步编写简单的PHP的Framework(六)

假装没事ソ 提交于 2019-12-10 16:08:32
不好意思,由于最近事情比较多,昨天的确没有时间写,今天刚好还有接近一个小时的时间,所以就继续写一篇。 不知道大家注意到没有,之前我们导入一个配置文件是通过include CONFIGS_PATH . '/config.php'来做的,这样做好吗? 不忙回答,我可以提两个问题: 1. 如果这个路径下面的config.php不存在会发生什么现象? 2.如果我将PHP这种配置文件修改成为xml这种配置文件之后会发生什么现象? 首先,如果文件不存在,那么PHP会抛出一个警告,但是程序继续执行;配置文件变成xml之后,入口文件处需要编写相应的读取xml的代码,而且需要把之前的include CONFIGS_PATH . '/config.php'这句代码修改掉。 那么有没有方法能够实现配置文件的无缝切换呢? 在具体讲解这些之前,我首先说一下工厂模式,现假设:A需要购买一辆红色汽车,他直接向B (一个生产汽车的工厂 )提出需求,B按照A的需求,从仓库中选取一辆合适的汽车,然后交给A。整个过程,A只是提出需求,具体汽车的选取是由B工厂来确定的,这种方式就是工厂模式。 举个例子: <?php public class Factory { public static function factory($whichOneToChoose) { $returnVal = 'Red'; switch(

“我想学编程”的真正含义是什么

心不动则不痛 提交于 2019-12-10 11:10:06
本文转自兄弟连薛亚飞老师的帖子 关于编程教育,有两件非常重要的事情是首先要知道的:   1、大多数人其实并不是真的想学代码   2、学习代码并不是只需要写代码就可以了 what-people-really-mean-when-they-say-i-want-to-learn-to-code 如果你不了解上面两件事的话,那么你学习代码的方式就是错的,而且你永远也学不会写代码。 这第一点经过我反复琢磨之后,我认为它的意思是,如果你并不是真的想学代码,那么在你迈进这一领域的那一刻起,你只会觉得枯燥乏味得要命。 我称之为编码谬论。人们认为他们想要学习代码是因为他们真正需要的是做一个产品。 仔细想想,这也是理所当然的。如果不能来做任何事情,那么代码这个知识本身就没有任何价值。因此,对于大多数人来说,学习代码最大的动机就是能够使用代码来构建一些东西(第二动机就是能应聘到一个高薪岗位。 这就让我不由得思考起了第二点,学习代码并不意味着只需要会写代码就可以了。 曾经我们在学代码之前必须先了解有关于计算机的几乎所有的内容(也因此被称为“计算机科学”)。后来随着事物的发展,现在已经演变成除非真的需要我们才会深入了解某方面的知识。例如,作为一个Web应用的开发人员,对于系统管理我几乎一无所知,因为我完全不需要使用这方面的知识。 所以,当有人说,他想学习编程的时候

LLVM每日谈之七 Clang

血红的双手。 提交于 2019-12-10 06:36:58
作者: snsn1984 官方介绍Clang是LLVM native的一个面向C/C++/Objective-C的编译器,目标是要提供一个编译非常快的编译器。他们宣称在Debug模式下编译Objective-C比GCC快3倍。至于是否能比GCC快这么多,总有人去做对比,大家可以搜索下,好像确实快了些。 Clang一般被说是LLVM的一个前端。关于前端的定义,大家可以从LLVM每日谈之二里面看到前端在整个LLVM体系中的位置。Clang当初的定位就是要做下一个十年中一个伟大的前端,这也是苹果公司需要的。谈到苹果,现在也是LLVM最大的赞助商。苹果公司认为GCC的前端越来越不好用,并且不能给苹果的IDE提供很好的服务,所以他们转向了LLVM,Clang的定位就是替代GCC的前端。 Clang需要单独下载源码,放到LLVM Source/tools下面,然后整个编译LLVM才行。一般大家按照官方文档编译,都是已经放了Clang了。开始学习Clang文档的地址: http://clang.llvm.org/get_started.html 。这里下载源码的话使用svn下载的是最新的主干版本,大家可以从首页找到最后的发布版本的下载, 地址在: http://llvm.org/releases/ 。这里可以看到发布的各个版本,目前最新的是3.1, 马上3.2就要出来了

前端开发-学习资料库

早过忘川 提交于 2019-12-10 02:05:40
前端开发-学习资料库 包含前端技术参考手册,前端编码规范,前端博客及社区,前端面试题,以及整理前端开源的一些开源书籍。 http://f2edocs.com 持续更新中... 参考、使用的项目 ECMAScript6编码规范 w3school ECMAScript 6入门 七天学会NodeJS JavaScript 秘密花园 CSS参考手册 12 JavaScript quirks 来源: oschina 链接: https://my.oschina.net/u/556016/blog/538010

php 求学路 之走入兴趣小组

拟墨画扇 提交于 2019-12-09 19:38:24
翻开一年前的日志才发现到今天为止我已经学php一年了,回想这一年我从一个不知道php为何物到现在已经也多多少少坚持了一年了,我大体回忆了这一年的学习过程。 第一步:在图书馆借了本书自己开始专研php,当时我连html都没学过就直接往网络方向专研,也不知道当时是什么力量鼓舞我与激励我,我现在都觉得不可思议的了,当然那段时间肯定是学的是非常差的,当然我也不是那么太投入的,毕竟是自学吧,令人兴奋的是接下来的转折点; 第二步:也许是上天是要我继续学习php吧,就在我对php快要失去耐性与兴趣的时候出现了一个老师,那是去年暑假的事,学校组织“三下乡”活动,我跟一个老师去下乡,说来也巧那个老师就教php(但现在已经不教的了)。他告诉我说,学校有个php兴趣小组有兴趣的话可以去参加,当时听到这个消息后我激动万分,心想:这不就是我要的结果吗。于是那个暑假的我过的很有盼头的,因为我知道开学后我就能到学校的php兴趣小组中去锻炼我自己的了,这个老师——现在成了我大学中唯一一个还记得我的名字教课老师(除了班导以为),我在这里给他取个代号为G吧。 故事到现在可能就很没什么稀奇的事发生了,嘿嘿,其实不然,还有了。 第三步:在开学的第一个星期下午我就跟我大学中室友也是我最好的朋友,我取个代号为D(当时也一起去下乡的,他跟我的友情以后我再继续说说的)去找G,G当时很忙的就把我和D交给当时的一个学长

怎么一步步编写简单的PHP的Framework(十三)

假装没事ソ 提交于 2019-12-07 17:08:58
上次讲到控制器怎么样将数据传递到视图,今天我就主要说一下在程序中怎么让代码更“安全”,之后就转到讲模型,再讲怎么做视图,最后再讲控制器的功能强化。 我再声明一下,我写这个文章只是让大家对PHP的框架编写有一个基本的了解,由于本人技术有限,这个文章是给PHP初学者学习的,所以高手勿喷,还有就是我现在时间也有限,所以每次可能需要两三天才能写一篇,每篇我写的时间也要控制在一个小时以内,由于边写这个文章边编代码,所以代码中可能会存在很多BUG,见谅!! 如果你是一个PHP爱好者,请在文章后面积极回复一下,这种交流不仅可以使我的PHP技术提高,也鼓励了我继续写下去的勇气,谢谢!! 很多人编写PHP代码什么都不注意,遇到很多警告,就直接通过error_reporting屏蔽掉,这样做我觉得问题是非常大的,比如: <?php $a = $_GET['a']; echo $a; 如果通过GET方式传递的参数有a,那么程序非常正常,但是如果没有传递呢,那就会抛出一个警告!! 我的作法是首先将error_reporting设置为E_STRICT,不允许程序出现警告!! 刚才这段代码可能就需要修改成: <?php $a = isset($_GET['a']) ? $_GET['a'] : ''; echo $a; 除了这种问题,还有就是PHP特有的 @符号 ,很多人都喜欢用这个来屏蔽错误

怎么一步步编写简单的PHP的Framework(一)

对着背影说爱祢 提交于 2019-12-07 17:08:34
自从入职天猫之后,都没怎么时间看oschina了,趁着这段时间参加培训,忙里偷闲,写几篇日志吧。 框架这个概念可能一开始就吓坏了很多PHP的Coder,其实你只要把一个Framework想明白了,其实也没啥,只是别人功能更复杂,细节考虑的更多,代码质量更高。 首先以我自己写的Toper为例讲解一下一般框架的流程(如果大家对我这个不成熟的框架有兴趣,可以在oschina里面搜索一下toper,也可以 点击这里 打开): 框架最重要的一个文件为入口文件,基本上相当于一个总控开关,所有的请求都需要经过这个文件: <?php define('APP_PATH',dirname(__FILE__).'/..'); //应用路径 include APP_PATH.'/Library/Toper/Core/FrontController.class.php';//导入前端控制器 $frontController = Tp_FrontController::getInstance(); $frontController->run(); 这个文件可以只做一件事情,那就是将控制权交给框架。 大家都知道,一个MVC的应用,所有的请求都必须经过控制器,所以下面我们来编写一个比较简单的控制器: <?php class Test_IndexController extends Tp_Controller {

Kotlin教程学习-Why Kotlin?

喜夏-厌秋 提交于 2019-12-07 10:13:39
Kotlin是一种优雅的语言,是JetBrains公司开发的JVM语言,与Java有着极密切的联系,Kotlin有着怎样的魅力呢?我也是才开始学习Kotlin,打算记录下我学习Kotlin的点点滴滴. 今天是开始的一天,就说说我初见Kotlin时的感受吧. 优雅,这是我脑海中出现的第一个词,语言本身的简洁搭配上IDEA独有的暗黑主题,一种高贵的气质与生俱来. 它到底有多优雅,敬请期待...... 来源: oschina 链接: https://my.oschina.net/u/1416297/blog/466409

怎么一步步编写简单的PHP的Framework(十四)

喜你入骨 提交于 2019-12-07 03:40:35
今天我说一下怎么在框架中over掉这些安全问题。 首先是SQL注入,这个如果你使用的是PDO,我觉得应该没什么问题,如果你使用的还是mysql_*等API,那么你可以在框架中实现bindParameter或者在插入数据库之前进行字符串转义。 前两天把上一篇文章写完之后,Vian在后面留言说到过SQL注入的一个解决方案,就是在在插入DB之前进行 '''.addslashes($id).''',它的意思就是首先进行addslashes操作,之后再强制单引号包裹,这样它就是一个不折不扣的字符串了,所以就注入不了,我觉得这个方法不错,赞一个!! 由于SQL注入需要联系到模型,XSS需要联系到视图,这两块儿我都没有开始讲,所以我再后面再讲怎么在框架中解决,当然,如果我写到后面忘记了,你也可以提醒我一下。 上一次我讲CSRF的时候,并没有给出一个解决方案,今天我就给出这个解决方案。实际上解决的方法很简单,就是给它产生一个随机数,然后后端判定传递过来的数和正确的数是否吻合, 如果不吻合,就不执行相应的代码了,这个随机数我们称为token。 为了简单,我们就将产生token和得到token的函数都写在控制器中,即Controller.php。 首先是生成随机数,最简单的方式是使用mt_rand()直接产生一个整数,但在这儿我使用之前我在initphp这个框架中看到的解决csrf的方法,在这儿