新课:PHP零基础(CMS开发)教学!
立即报名Composer安装ThinkPHP5
06分钟27秒TP5的运行流程
03分钟41秒TP51配置概述
03分钟15秒配置的获取与设置
12分钟23秒配置助手函数的使用方式
05分钟43秒Composer安装TP51_Win版
07分钟33秒PHP经典设计模式
14分钟55秒Trait类代码复用
12分钟57秒容器类Container简介
11分钟11秒自动依赖注入_1
16分钟48秒自动依赖注入_2
04分钟50秒将类绑定到容器中
12分钟22秒将闭包绑定到容器中
05分钟47秒Facade静态代理_1
12分钟50秒Facade静态代理_2
15分钟45秒Facade静态代理_3
03分钟58秒Request请求对象_1
11分钟28秒Request请求对象_2
09分钟24秒揭密数据库连接方式
28分钟07秒数据库的增删改查操作
54分钟49秒模型简介
17分钟31秒模板赋值与变量输出_1
23分钟11秒模板赋值与变量输出_2
09分钟51秒外部资源导入与格式化输出
20分钟44秒循环判断与分页输出
10分钟38秒快速生成知乎首页
11分钟42秒模板布局
15分钟47秒模板继承
19分钟02秒创建数据表
38分钟21秒验证器与静态代理
34分钟01秒控制器验证
08分钟46秒独立验证
20分钟03秒Peter陪您看手册_1
21分钟01秒Peter陪你看手册_2
35分钟23秒Peter陪您看手册_3
22分钟26秒Peter陪您看手册_4
22分钟26秒社区问答的前端页面_1
26分钟35秒社区的前端页面_2
31分钟43秒用户注册功能的初步实现
30分钟06秒验证注册信息
14分钟38秒用户模型的基本设置
14分钟15秒用户登录验证
15分钟29秒退出与防止重复登录
15分钟08秒文档模型与验证器
23分钟33秒制作文章发布模板
29分钟50秒文章发布功能
23分钟48秒注册成功后自动登录
11分钟13秒显示导航栏
12分钟40秒样目高亮的设置
16分钟33秒首页与列表页模板
12分钟29秒文件上传与列表与分页显示
39分钟47秒富文本编辑器
11分钟45秒搜索功能的实现
14分钟37秒详情页制作
19分钟07秒Ajax实现收藏功能
31分钟02秒入口文件与模块自动绑定
12分钟34秒后台入口的设计
11分钟34秒管理员登录功能
17分钟05秒后台模板布局
29分钟46秒用户列表与权限设置
23分钟36秒编辑用户操作
22分钟48秒用户删除功能
11分钟22秒分类权限与列表管理
22分钟48秒分类的编辑,添加与删除
27分钟28秒文章列表与分页
17分钟22秒文章权限管理
20分钟29秒文章编辑与删除功能
16分钟30秒站点配置管理_1
21分钟27秒站点配置管理_2
14分钟09秒站点配置管理_3
22分钟03秒评论功能实现
35分钟16秒HTML课程总结
19分钟39秒CSS部分总结
17分钟44秒JavaScript课程总结
10分钟14秒PHP课程总结
19分钟34秒ThinkPHP5.1课程总结
18分钟11秒平静背后的哲学5年前
<?php //单例模式 class SIte{ //属性 public $sitename; //本类的静态实例 protected static $instance = null; //禁用构造器 private function __construct($sitename){ $this->sitename = $sitename; } //获取本类唯一的实例 public static function getInstance($sitename="php中文网"){ if(!self::$instance instanceof self){ self::$instance = new self($sitename); } return self::$instance; } } //用工厂模式生成本类的单一实例 class Factory{ //创建指定类的实例了 public static function create(){ return Site::getInstance('www.php.cn'); } } //注册树 /* 注册:set() 对象挂在树上 获取:get() 获取对象 注销:_unset() 销毁对象 */ class Register{ //创建对象池:数组 protected static $object = []; //生成对象并上树 public static function set($alias,$object){ self::$object[$alias] = $object; } //从树上获取对象 public static function get($alias){ return self::$object[$alias]; } //把书上的对象吃掉 public static function _unset($alias){ unset(slef::$object[$alias]); } } //将Site类的实例 放至对象树 Register::set('site',Factory::create()); //从树上获取一个对象 $obj = Resgister::get('site'); echo $obj->sitename; /* trait实现了代码的复用 突破单继承限制 trait不是用于实例话 优先级问题: 当前类和父类中方法一样 trait类的优先级高于同名父类方法 */ trait Demo1{ public function test(){ return __METHOD__; } } trait Demo2{ public function test1(){ return __METHOD__; } } class Demo{ use Demo1,Demo2;//相当于将Demo1和Demo2中的方法引进来 public function test2(){ return __METHOD__; } public function test(){ return $this->test1(); } }
1