陌桑教程:自己动手编写一个PHP开源框架(一)

很多用过Discuz!、WordPress、ECSHOP等开源网站的人都感觉它们很好,但是自己想做一些改动或二次开发,却感觉困难重重,无从下手。很多用过Laravel,thinkPHP等框架的都觉得很方便,但是也只懂得简单调用而已,不乏做PHP开发但入行不深的Coder。究其原因,还是不了解其中原理。

本教程旨在由浅入深,教你学会其中原理,能自己开发一个简单的框架,日后有开发产品给他人使用的能力。

适用对象:有一定面向对象知识基础但是入行不深的同仁。

一. 从MVC结构开始

开源框架,无一例外都使用MVC开发模式。网上关于MVC的概念解释很多,如果你看了还不太了解,也很正常,多数解释都晦涩难懂,可以先不必理会,按照我们的思路一步步往下做,然后再回头看,你肯定对MVC有更透彻的理解。

首先我们严格按照MVC思想进行目录组织。

在web项目根目录新建三个文件夹:

— models

—views

—controllers

然后再在根目录新建文件index.php

index.php是整个web应用的入口点,所有请求都会经过它,它通过获取用户传递的参数,分别指派给不同controllers执行,controllers再调用models进行数据处理(通常是对数据库或文件的操作),然后再经views的文件显示结果,大致就是这个流程。

现在根目录的应该是这样的

--- models
---views
---controllers
---index.php

 

二. 定义一些常用的全局常量。

在index.php中写上以下代码

<?php  //web应用的根目录  
define("SERVER_ROOT", dirname(__FILE__));  
//设置域名  
define('SITE_ROOT' , 'http://你的域名');  //如define('SITE_ROOT' , 'https://blog.mosang.net'),以下演示均用https://blog.mosang.net表示域名,在实际操作中,请把此域名更改为您绑定的域名或者IP
?>

这样整个应用中访问在它之中定义的这些变量。

三. 建立路由文件

在controllers目录下新建一个文件,名字为“router.php”(当然你可以任意命名),这个文件用来处理所有页面请求,我们通常称为路由文件。它就像你家里的路由器,它负责把宽带分发到家中的每台电脑。router.php文件将会获取传入到index.php的页面请求,然后把请求分派给不同的控制器(controllers)。

我们现在假定用户通过index.php?channel=photo&content=latest连接来访问(channel=news表示图片频道,content=latest表示最近一次发布的内容)

在router.php输入以下代码

<?php 
$channel = $_GET["channel"];
$action = $_GET["content"];
echo("您访问的频道是".$channel."<br>");
echo("请求的内容是".$content);
?>

在index.php中引入这个路由文件:

<?php  
/** 
 * 定义文档路径 
 */  
define("SERVER_ROOT", dirname(__FILE__));  
define('SITE_ROOT' , 'https://blog.mosang.net');  
/**  
 * 引入router.php  
 */  
 require_once(SERVER_ROOT . '/controllers/' . 'router.php');  
?>

 

在浏览器地址栏中输入 https://blog.mosang.net/index.php?channel=photo&content=latest

得到的页面结果如下:

您访问的频道是photo
请求的内容是latest

四. 建立路由执行文件

通过上面的代码,我们可以获取用户提交的Addr中要访问的频道,假设频道有photo,news、about等多个频道,我们希望不同请求调用不同文件来处理。

在controllers文件夹中新建一个文件 photo.php,并输入以下代码:

<?php
//定义一个输出当前访问频道名的类
class photo_Controller {
    var $channelname; 
    function showcurrent($channelname) {
    this.$channelname = $channelname;
    echo("您正在访问的频道是:".$channelname);
    }
}
?>

同时,我们修改router.php的代码,如下:

<?php
$channel = $_GET["channel"]; //获取频道名
$action = $_GET["action"];
$channelFile = SERVER_ROOT . '/controllers/'.$channel . ".php";//频道名对应的php文件
if (file_exists($channelFile)) {
 include_once ($channelFile);//频道名对应的php文件引入
 $channelclass = $channel . "_Controller";
 if (class_exists($channelclass)) {
 $controller = new $channelclass; //创建实例
 $controller->showcurrent($channel); //输出入当前频道名
 } else {
 die("不存在该频道的类!");
 }
} else {
 die("不存在您请求的频道!");
}
?>

目前为止,整个目录文件如下:

--- models
---views
---controllers
   --- photo.php
   --- router.php
---index.php

我们一样在浏览器地址栏中输入 https://blog.mosang.net/index.php?channel=photo&content=latest,运行结果如下:

您正在访问的频道是:photo

下面我们把photo.php复制一份,放在photo.php同一目录下,文件名更改为news.php,把news.php中的类名”photo_Controller”更改为”news_Controller”,其他不变:

<?php
class news_Controller {
    var $channelname;
    function showcurrent($channelname) {
    this.$channelname = $channelname;
    echo("您正在访问的频道是:".$channelname);
    }
}
?>

我们在浏览器中输入 https://blog.mosang.net/index.php?channel=news&content=latest,运行结果如下:

您正在访问的频道是:news

目前为止,我们实现了根据参数不同,调用不同的控制器。

APP UI设计规范制作指南

在创作阶段设计页面时,如果没有规范来指导,设计过程中很容易产生细微的出入,导致出现控件不一致,增加返工率,这时候我们需要界面制定设计规范。

>> 阅读全文

如何把设计做的简单

原文作者:DABAO 来源:https://www.zcool.com.cn/article/ZNTYzMDQ=.html

简单并不意味着欠缺或是低劣,也不意味着不注重装饰或者完全赤裸裸。

如何把设计做的简单

耐看设计的几个细节

原文作者:菜心设计铺

文章来源:http://www.jianshu.com/p/a107c9b463d1

最近在做手机OS的主题图标,对细节的感触很大,今天结合主题图标来和大家聊聊,我们可以从哪些方面注意自己的设计细节,大纲如下:

1.给造型加点细节
2.多加点质感的细节
3.不要让图标看着灰灰的
4.风格特点的运用

1.给造型加点细节

造型是所有设计执行的第一步,造型做不好,说别的都没用。那如何能给造型加点细节呢?打个比方,我们要画一个圆角矩形:

哪个更有设计感,更有细节呢?当然是第二个,第一个一看就是默认的圆角,没有细节可言,放在真正的案例中就像下图一样:

如果 youtube 的图标用了第一个普通的圆角矩形,可能就有现在那么耐看了! >> 阅读全文

相近性在设计中的应用

格式塔理论的相近性原则告诉我们,我们的大脑会将距离相近的各部分元素组成一个整体。

相近性原则:

当分离的各个元素接近的时候,他们便呈现一个整体的形象,就算这些元素看起来不一样。

相近掩盖差别:

利用相近性我们将不同的字母、形状及颜色元素组成一个标志。

尽管上述各个字母的形态并不一样,但是由于各个元素距离相近,我们在识别时仍会将其看作一个完整的词组。

尽管上述右边的标志是由不同形状及颜色的元素结合,但相近性原则使我们能够清晰识别出一个房子的轮廓。

组合相关元素:

将元素相合,能够创造出更有条理的展示,不但更具美感,也使读者在观看时更加轻松。

改造前的名片

缺乏联系的设计:

上面的这个设计仅仅是考虑如何填满版面,而联系信息却被分割成三块元素,这使到观看的人会花额外的精力将这些信息元素组合在一起。

改造后的名片

产生联系的设计:

将相关的文字元素且合起来,立即就产生了一种清晰的阅读效果,现在名片上的联系信息能够轻松地让人从上到下观看。上面竖版的排列中,标志形成了一个视觉焦点,所以我们的眼睛首先会移到上面观看,然后很自然地由上到下地阅读下面的联系信息。

白色背景的重要性:

相近性原则也取决于元素在背景上不同位置的放置,从而使人们获得各种不同的信息组合,而最清晰的效果就是利用白色背景来区分这些组合。



在上面这个关于学习提升的宣传单张中,我们通过元素的属性来将上方的文字区域A作为一个相近性的组合,也将其视作一个单独的组合,尽管B也是一堆文字,甚至两者的文字意思也接近,但我们并不会将A与B看作一个整体。

文章来源: http://www.sj33.cn/article/sjll/201707/47665.html