Sublime Text:一款具有代码高亮、语法提示、自动完成且反应快速的编辑器软件,不仅具有华丽的界面,还支持插件扩展机制,用她来写代码,绝对是一种享受。相比于难于上手的Vim,浮肿沉重的Eclipse,VS,即便体积轻巧迅速启动的Editplus、Notepad++,在SublimeText面前大略显失色,无疑这款性感无比的编辑器是Coding和Writing最佳的选择,没有之一。
Sublime Text 2和3的对比

相比于2,Sublime Text 3就秒启动一项,就压倒性地胜利了。因此在之后的叙述中都以Sublime Text 3为主角。并且3一直在不断的完善更新,具体的差异可参看Sublime Blog.简单的说:
ST3支持在项目目录里面寻找变量
提供了对标签页更好地支持(更多的命令和快捷键)
加快了程序运行的速度
更新了API,使用Python3.3
强烈推荐朋友们使用3! 唯快不破,不解释。
Sublime Text 3安装插件

Sublime Text的强大就是她拥有强大的课可扩展性。您可根据自己的需要安装不同的插件;这使得她变的无比强大的同时又不失轻便。
插件安装方式一:直接安装:
安装Sublime text 3插件很方便,可以直接下载安装包解压缩到Packages目录(菜单->preferences->packages)。
插件安装方式二:使用Package Control组件安装:
按Ctrl+`调出console(注:安装有QQ输入法的这个快捷键会有冲突的,输入法属性设置-输入法管理-取消热键切换至QQ拼音)粘贴以下代码到底部命令行并回车:
1
import urllib.request,os; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); open(os.path.join(ipp, pf), 'wb').write(urllib.request.urlopen( 'http://sublime.wbond.net/' + pf.replace(' ','%20')).read())
重启Sublime Text 3。如果在Perferences->package settings中看到package control这一项,则安装成功。按下Ctrl+Shift+P调出命令面板输入install 调出 Install Package 选项并回车,然后在列表中选中要安装的插件。
PS:国内使用SublimeText3,经常可能遇到无法安装可用插件问题,可remove掉Package Control重新安装下;如遇到连Package Control也无法安装,则可以在别处拷贝一份关于Package Control的文件-(Package Control.sublime-package)存放于Installed Packages目录之下即可。
如果如上述操作,还是不能正确安装,并且在 sublime 的 console 安装 package control 出现 275309 错误,那么去打开 Preferences->Settings 找到 ignored_packages 配置选项,删除其中对 Package Control 的约束即可(update@16-12-06)。
Sublime Text 3插件推荐

无插件,不神器!根据自己的需要定制属于自己的强大插件集;下面是一些常用的推荐。
Sublime Text3插件:增强篇
20个强大的SublimeText插件
作为在移动端旧游之后,又Web端新游的自己,墙裂推荐以下这么几款插件:
MarkDown Editing
SublimeText不仅仅是能够查看和编辑 Markdown 文件,但它会视它们为格式很糟糕的纯文本。这个插件通过适当的颜色高亮和其它功能来更好地完成这些任务。关于如何在SublimeText下高效些东西可参见文章:sublime text 2(3)下的Markdown写作 抑或是前段时间写下的追寻高效工作的一路折腾㈡
SideBarFolders
打开的文件夹都太多了? 来用这个来管理文件夹,世界原来也可以这么美好。⭐️⭐️⭐️⭐️⭐️
SideBarFolders
SideBarFolders

Sublime Terminal
这个插件可以让你在Sublime中直接使用终端打开你的项目文件夹,并支持使用快捷键。
ColorPicker
通常,如果你想使用一个颜色选择器则可能打开 Photoshop 或 GIMP。而在 Sublime Text 中,你可以使用内置的颜色选择器。安装完成后,只要按下Ctrl / Cmd + Shift + C 快捷键。
SublimeREPL
这可能是对程序员很有用的插件。SublimeREPL 允许你在 Sublime Text 中运行各种语言(NodeJS , Python,Ruby, Scala 和 Haskell 等等)。
Ctags插件
有童鞋抱怨Sublime Text不能支持函数的跳转(比如像Eclipse那样,按住Control点击该方法或者对象,即可跳转到定义的地方; Alt+←即可回到原处)。其实Sublime Text也可以借助插件实现之(当然,有些情况下:Can not find defination)毕竟这个也是借助正则来匹配完成的。因此这个也就要求代码很规范。这个插件相对来讲会有些麻烦,具体的可以参见:Sublime Text ctags 的配置.
Update @2016-11: 在最新的3124版本中,Sublime已经注入了函数Show Definition功能————which will show where a symbol is defined when hovering over it with the mouse;具体可参见Sublime Text 3 Build 3124。如此一来,Ctags 插件就显得很鸡肋了,而且它的配置辣么麻烦。
SublimeLinter插件
SublimeLinter 是前端编码利器——Sublime Text 的一款插件,用于高亮提示用户编写的代码中存在的不规范和错误的写法,支持 JavaScript、CSS、HTML、Java、PHP、Python、Ruby 等十多种开发语言。这篇文章介绍如何在 Windows 中配置 SublimeLinter 进行 JS & CSS 校验。
比如写例如像lua这样的弱语言脚本代码,有这个可以规避掉很多不该有的低级错误吧?当然这也需要你SublimeLinter安装完毕之后再安装一个SublimeLinter-lua即可。具体的使用可以参见:借助 SublimeLinter 编写高质量的 JavaScript & CSS 代码
SideBarEnhancements插件
SideBarEnhancements是一款很实用的右键菜单增强插件;在安装该插件前,在Sublime Text左侧FOLDERS栏中点击右键,只有寥寥几个简单的功能;安装了就相当于给其丰了大胸一般。⭐️⭐️⭐️⭐️
更强大的是,该插件还能让我们自定义快捷键呼出某个浏览器以预览页面!这样就不用到项目目录下寻找和拖动到特定浏览器中预览了。
安装此插件后,点击菜单栏的preferences->package setting->side bar->Key Building-User,键入以下代码:
1
2
3
4
5
6
7
8
9
10
11
[
{ "keys": ["ctrl+shift+c"], "command": "copy_path" },
//chrome
{ "keys": ["f2"], "command": "side_bar_files_open_with",
"args": {
"paths": [],
"application": "C:\Users\jeffj\AppData\Local\Google\Chrome\Application\chrome.exe",
"extensions":"."
}
}
]
这里设置按Ctrl+Shift+C复制文件路径,按F2即可在Chrome浏览器预览效果(如果需要的话,也可以根据自己的需要为Firefox,Safari,IE,Opera等加上),当然你也可以自己定义喜欢的快捷键,最后注意代码中的浏览器路径要以自己电脑里的文件路径为准。
HTML-CSS-JS Prettify
一款集成了格式化(美化)html、css、js三种文件类型的插件,即便html,js写在PHP文件之内。插件依赖于nodejs,因此需要事先安装nodejs,然后才可以正常运行。插件安装完成后,快捷键ctrl+shift+H完成当前文件的美化操作。插件对html、css文件的美化不是非常满意,但还可以,后面将说明如何修改css美化脚本。本人用起来超级爽的,鉴于篇幅,就不赘述,可以参见这篇介绍。
CSScomb CSS属性排序:
有时候看看自己写的CSS文件,会不会觉得属性很乱查找不易维护难?CSScomb可以按照一定的CSS属性排序规则,将杂乱无章的CSS属性进行重新排序。选中要排序的CSS代码,按Ctrl+Shift+C,即可对CSS属性重新排序了,代码从此简洁有序易维护,如果不款选代码则插件将排序文件中所有的CSS属性。当然,可以自己自定义CSS属性排序规则,打开插件目录里的CSScomb.sublime-settings文件,更改里面的CSS属性顺序就行了。因为这个插件使用PHP写的,要使他工作需要在环境变量中添加PHP的路径,具体请看github上的说明。
SublimeTmpl 快速生成文件模板
一直都很奇怪为什么sublime text 3没有新建文件模板的功能,像html头部的DTD声明每次都要复制粘贴。用SublimeTmpl这款插件终于可以解脱了,SublimeTmpl能新建html、css、javascript、php、python、ruby六种类型的文件模板,所有的文件模板都在插件目录的templates文件夹里,可以自定义编辑文件模板。⭐️⭐️⭐️⭐️+
SublimeTmpl默认的快捷键:
1
2
3
4
5
6
ctrl+alt+h html
ctrl+alt+j javascript
ctrl+alt+c css
ctrl+alt+p php
ctrl+alt+r ruby
ctrl+alt+shift+p python
如果想要新建其他类型的文件模板的话,先自定义文件模板方在templates文件夹里,再分别打开Default (Windows).sublime-keymap、Default.sublime-commands、Main.sublime-menu、SublimeTmpl.sublime-settings这四个文件照着里面的格式自定义想要新建的类型,这里就详细介绍了,请各位自己折腾哈~
Javascript-API-Completions:
支持Javascript、JQuery、Twitter Bootstrap框架、HTML5标签属性提示的插件,是少数支持sublime text 3的后缀提示的插件,HTML5标签提示sublime text3自带,不过JQuery提示还是很有用处的,也可设置要提示的语言。
sublime-jq-plugin
sublime-jq-plugin
SFTP:快速编辑远程服务器文件
在Win下用Xftp 和 WinScp,被这种需要切换点击or F5刷新的手动操作蛋疼到无语;故此一遇见这SFTP,顿觉这世界都美好了许多。当然Sublime下面也有些其他同步插件,比如FtpSnyc,但是配置起来的错误提示一点都不人性化,就毫不留情的舍弃了。Sublime下有SFTP,只要Ctrl+S即可同步本地到服务器,妥妥的爽歪歪有么有?如何配置,请参见在 Sublime Text中使用 SFTP 插件快速编辑远程服务器文件;如欲使用FtpSync可参见Sublime使用及FtpSync远程同步;大道至简,因简而悦;开心垒码,值得折腾。
WakaTime – 记录你的Code时间;
WakaTime可以做到精确地统计到你花在某个项目上的时间;WakaTime针对不同的IDE,拥有不同的插件,在Sublime上安装着插件,就能统计到我使用Sublime进行的所有项目的行为。可以高效管理和知晓自己code时间;并且,统计完善, 适合发朋友圈装逼(如果你喜欢的话)~
Waka的基本设计和rescuetime类似。每个人注册完将获取一个key,装一个客户端,把key输进去(登陆是同一个道理),然后它就把本地的所有行为带个key扔给服务器来统计,一段时间之后给你个报表。不过Waka做的真的很精准,精确到每一个文件用了多少秒,每一种语言用了多少时间。
WakaTime
WakaTime
安装和使用都很简单,请参见这里。另外一篇比较详细的文章时间都去哪了?用RescueTime和WakaTime来记录你的时间,对RescueTime和WakaTime有一个更为详细的叙述,可以一读。
Doc​Blockr: 代码块注释
可以快速的对函数进行注释。保持代码规范。支持多种语言,有 JavaScript (including ES6), PHP, ActionScript, Haxe, CoffeeScript, TypeScript, Java, Apex, Groovy, Objective C, C, C++ and Rust.
/
:回车创建一个代码块注释
/**:回车在自动查找函数中的形参等等。
它会生成 JSDoc 格式的注释。如果你从没有使用过类似的工具,DocBlockr 会让你觉得以前没有它是如何写代码的。帮助你创造你的代码注释,通过解析功能,参数,变量,并且自动添加基本项目;如果你愿意其更为便捷,不妨再结合AutoHotKey,高效注释,由此开启。
sublime-text-git: Git 版本控制
可视化的操作:帮助你与你的Git repo协议进行交互。它支持很多命令像init,push, pull, branch, stash,等等。使用它当然提前需要安装 Git,并做好响应的配置;对于这个插件,不妨看下这篇文章 Using Git Inside of Sublime Text to Improve Workflow,相信她的伴随不会让你失望的。⭐️⭐️⭐️⭐️⭐️
advancedNewFile: 快速创建文件
当我们在 Sublime Text 编辑器里我们可以通过快捷键command+n(win: ctrl+n),来新建一个文件,然后command+s(Win:ctrl+s)进行弹出保存框,填写文件名进行保存。还是老问题,麻烦!!我们接下来就通过安装advancedNewFile插件来提升我们在Sublime Text编辑器下的创建文件速度。⭐️⭐️⭐️⭐️
关乎其使用,安装完成之后,运用快捷键command+alt+n(win: ctrl+alt+n)
,Sublime Text底部会弹出输入框;我们只需在这个输入框里输入我们需要新建的文件名回车即可(我们甚至可以带路径,譬如:src/components/perfect.vue;这就会在当前项目目录下,建立该文件;需要注意的是这路径前面不可加 ‘/‘, 这会使得建立的路径成为用户目录,而非改项目目录)。默认情况下文件会存储在当前目录,如果当前没有目录,会存储在用户的家目录。
TrailingSpaces: 检测并一键去除代码中多余的空格
这款插件本身倒没什么。但是如果你写前端,并处在当下这个时代,她就很有用(话说,Eslint 等工程限制级工具必须使用吧,那么项目对于空格的约定肯定是有必要的,但也会令你头疼吧?那么这款插件的作用就体现出来了)她可以自动将多余的空格标红,以示提醒。当然,如果你想一键摒除之,这也很好办,加入一点配置即可:在 Preferences / Key Bindings – User加上如下代码即可(数组内部,当然快捷键可自行约定,我这里用的是 ctrl+shift+d );(⭐️⭐️⭐️⭐️⭐️ For Front-End)
1
{ "keys": ["ctrl+shift+d"], "command": "delete_trailing_spaces" }
剩下些许其他的可以按需安装的插件,比如:
ConvertToUTF8 支持 GBK, BIG5, EUC-KR, EUC-JP, Shift_JIS 等编码的插件
Bracket Highlighter 用于匹配括号,引号和html标签。对于很长的代码很有用。安装好之后,不需要设置插件会自动生效
DocBlockr 可以自动生成PHPDoc风格的注释。它支持的语言有Javascript, PHP, ActionScript, CoffeeScript, Java, Objective C, C, C++
Emmet(Zen Coding)快速生成HTML代码段的插件,强大到无与伦比:可以超快速编写HTML/CSS/JS,当然这个插件还支持多种编译环境,如常见的:Eclipse/Aptana、Coda、Notepad++、Adobe Dreamweaver、TextMate等,web开发必备!!!。⭐️⭐️⭐️⭐️⭐️
jsFormat 格式化js代码,懂者自懂;强迫症Coder必备!默认快捷键Ctrl+Alt+F。
phpFormat 格式化php代码,懂者自懂;强迫症Coder必备!
CSS Compact Expand CSS属性展开收缩:写CSS的盆友,喜欢将其写多行还是一行(个人喜欢将其格式化为多行)?如果阅读别人的代码不符合自己的习惯,可以用CSS Compact Expand这个插件将CSS格式化一下,按 Ctrl+Alt+[ 收缩CSS代码为一行显示,按 Ctrl+Alt+] 展开CSS代码为多行显示;强迫症Coder必备!。
Autoprefixer插件:这是一款CSS3私有前缀自动补全插件;该插件使用CanIUse资料库(当然,SublimeText自然也有CanIUse这个插件咯),能精准判断哪些属性需要什么前缀,与CssComb插件一样,该插件也需要系统已安装Node.js环境;使用方法:在输入CSS3属性后(冒号前)按Tab键即可。
YUI Compressor:压缩JS和CSS文件,按F7键后,若压缩当前文件(demo.js),则压缩后的文件(demo.min.js)保存在该文件的同级目录,需要安装java的JDK。使用方法:YUI Compressor
ClickableURLs:可点击的URL
使用小插件ClickableURLs可以让文件中的URL能够点击。
EncodingHelper:编码众多,比较丰富。安装后,在右下角的UTT-8右键可以将其他编码转换成UTF-8。
WordCount:可以实时显示当前文件的字数。安装后,后下角多出字数。
SyncedSideBar: 每次打开文件,侧边栏都会同步显示该文件所在目录树中的位置(如果打开的文件是目录树的子集,还能将目录树自动展开,真是爱之不已,挺有用的一款插件)。⭐️⭐️⭐️⭐️⭐️
AutoFileName:快捷输入文件名,文件路径自动提示的。自动完成文件名的输入,如图片选取,输入”/”即可看到相对于本项目文件夹的其他文件。⭐️⭐️⭐️⭐️
Vue Syntax Highlight: Vue(*.vue)高亮插件;于前端而言,使用Vue框架开发,是一个很酷爽的存在,那么此插件也就很有必要拥有;同时Jade, SASS等插件也是很有拥有的必要,谁用谁知道(说到用vue, 这vue-cli就蛮有使用的必要了( Webpack, Eslint, Test等都配置完善,十分贴心); 而写Js代码,于稍大项目 Eslint 就很有使用必要,而 sublime 在针对使用 Eslint 的 *.vue文件,目测还没有很好格式化插件,坐等诞生

上海优翰最初一切都是为了有效提升品牌价值。唯诺咨询、创意设计、品牌策略是和一多年实践得出提升品牌价值不可或缺、缜密的工作链。我们充分理解、尊重客户的意愿,并充分利用再创新理念、专业品牌分析工具、市场网络和社会。
网品牌网站界面设计
凭借丰富的网站策划知识及先进的网站设计水平,上海优翰的开发团队完全能胜任各种网站(互联网应用程序)的设计开发工作。从化妆品网站,汽车类网站,服装网站等,唯诺科技都可以根据您的需求,设计出各类型个性化的网站!
企业网站建设开发
网站是企业产品和服务的网上包装。客户对网站品质的第一印象决定了他们对您的产品和服务的信心。拥有一个美观实用的企业门面网站是树立网络形象的第一步,他为您顺利开展网络推广奠定了坚固的基石.
互动网站视觉设计
主要在于对产品、品牌的内涵了解程度、美术功底、Flash应用技术的把握上面。通过Flash、视频技术等,突出产品或品牌的风采及形象、让人获得耳目一新的视听效果、激发消费者的购买、拥有、享受热情是Flash网站的最大目标.
本内容转载上海优翰信息科技有限公司:http://www.shyohan.com/article/industry/20.html

Thinkphp常用配置
CHECK_FILE_CASE -- windows环境下面的严格检查大小写。

/* 项目设定 */
    'APP_DEBUG'    => false, // 是否开启调试模式
    'APP_DOMAIN_DEPLOY'     => false,   // 是否使用独立域名部署项目
    'APP_PLUGIN_ON'         => false,   // 是否开启插件机制
    'APP_FILE_CASE'         => false,   // 是否检查文件的大小写 对Windows平台有效
    'APP_GROUP_DEPR'        => '.',     // 模块分组之间的分割符
    'APP_GROUP_LIST'        => '',      // 项目分组设定,多个组之间用逗号分隔,例如'Home,Admin'
    'APP_AUTOLOAD_REG'      => false,   // 是否开启SPL_AUTOLOAD_REGISTER
    'APP_AUTOLOAD_PATH'     => 'Think.Util.',// __autoLoad 机制额外检测路径设置,注意搜索顺序
    'APP_CONFIG_LIST'       => array('taglibs','routes','tags','htmls','modules','actions'),// 项目额外需要加载的配置列表,默认包括:taglibs(标签库定义),routes(路由定义),tags(标签定义),(htmls)静态缓存定义, modules(扩展模块),actions(扩展操作)

 /* Cookie设置 */
    'COOKIE_EXPIRE'         => 3600,    // Coodie有效期
    'COOKIE_DOMAIN'         => '',      // Cookie有效域名
    'COOKIE_PATH'           => '/',     // Cookie路径
    'COOKIE_PREFIX'         => '',      // Cookie前缀 避免冲突


/* 数据库设置 */
    'DB_TYPE'               => 'mysql',     // 数据库类型
     'DB_HOST'               => 'localhost', // 服务器地址
     'DB_NAME'               => '',          // 数据库名
     'DB_USER'               => 'root',      // 用户名
     'DB_PWD'                => '',          // 密码
     'DB_PORT'               => 3306,        // 端口
     'DB_PREFIX'             => 'think_',    // 数据库表前缀
   'DB_SUFFIX'             => '',          // 数据库表后缀
    'DB_FIELDTYPE_CHECK'    => false,       // 是否进行字段类型检查
    'DB_FIELDS_CACHE'       => true,        // 启用字段缓存
    'DB_CHARSET'            => 'utf8',      // 数据库编码默认采用utf8
    'DB_DEPLOY_TYPE'        => 0, // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
    'DB_RW_SEPARATE'        => false,       // 数据库读写是否分离 主从式有效


 /* 数据缓存设置 */
    'DATA_CACHE_TIME' => -1,      // 数据缓存有效期
    'DATA_CACHE_COMPRESS'   => false,   // 数据缓存是否压缩缓存
    'DATA_CACHE_CHECK' => false,   // 数据缓存是否校验缓存
    'DATA_CACHE_TYPE' => 'File', // 数据缓存类型,支持:File|Db|Apc|Memcache|Shmop|Sqlite| Xcache|Apachenote|Eaccelerator
    'DATA_CACHE_PATH'       => TEMP_PATH,// 缓存路径设置 (仅对File方式缓存有效)
    'DATA_CACHE_SUBDIR' => false,    // 使用子目录缓存 (自动根据缓存标识的哈希创建子目录)
    'DATA_PATH_LEVEL'       => 1,        // 子目录缓存级别

    /* 错误设置 */
    'ERROR_MESSAGE' => '您浏览的页面暂时发生了错误!请稍后再试~',//错误显示信息,非调试模式有效
    'ERROR_PAGE'    => '', // 错误定向页面

    /* 静态缓存设置 */
    'HTML_CACHE_ON'   => false,   // 默认关闭静态缓存
    'HTML_CACHE_TIME' => 60,      // 静态缓存有效期
    'HTML_READ_TYPE'        => 0,       // 静态缓存读取方式 0 readfile 1 redirect
    'HTML_FILE_SUFFIX'      => '.shtml',// 默认静态文件后缀

    /* 语言设置 */
    'LANG_SWITCH_ON'        => false,   // 默认关闭多语言包功能
    'LANG_AUTO_DETECT'      => true,   // 自动侦测语言 开启多语言功能后有效

    /* 日志设置 */
    'LOG_RECORD'            => false,   // 默认不记录日志
    'LOG_FILE_SIZE'         => 2097152, // 日志文件大小限制
    'LOG_RECORD_LEVEL'      => array('EMERG','ALERT','CRIT','ERR'),// 允许记录的日志级别

    /* 分页设置 */
   'PAGE_ROLLPAGE'         => 5,      // 分页显示页数
   'PAGE_LISTROWS'         => 20,     // 分页每页显示记录数

    /* SESSION设置 */
    'SESSION_AUTO_START'    => true,    // 是否自动开启Session
    // 内置SESSION类可用参数
    //'SESSION_NAME'          => '',      // Session名称
    //'SESSION_PATH'          => '',      // Session保存路径
    //'SESSION_CALLBACK'      => '',      // Session 对象反序列化时候的回调函数

    /* 运行时间设置 */
    'SHOW_RUN_TIME'   => false,   // 运行时间显示
    'SHOW_ADV_TIME'   => false,   // 显示详细的运行时间
    'SHOW_DB_TIMES'   => false,   // 显示数据库查询和写入次数
    'SHOW_CACHE_TIMES' => false,   // 显示缓存操作次数
    'SHOW_USE_MEM'   => false,   // 显示内存开销
    'SHOW_PAGE_TRACE' => false,   // 显示页面Trace信息 由Trace文件定义和Action操作赋值
    'SHOW_ERROR_MSG'        => true,    // 显示错误信息

 /* 模板引擎设置 */
    'TMPL_ENGINE_TYPE' => 'Think',     // 默认模板引擎 以下设置仅对使用Think模板引擎有效
    'TMPL_DETECT_THEME'     => false,       // 自动侦测模板主题
    'TMPL_TEMPLATE_SUFFIX' => '.html',     // 默认模板文件后缀
    'TMPL_CACHFILE_SUFFIX' => '.php',      // 默认模板缓存后缀
    'TMPL_DENY_FUNC_LIST' => 'echo,exit', // 模板引擎禁用函数
    'TMPL_PARSE_STRING'     => '',          // 模板引擎要自动替换的字符串,必须是数组形式。
    'TMPL_L_DELIM'          => '{',   // 模板引擎普通标签开始标记
    'TMPL_R_DELIM'          => '}',   // 模板引擎普通标签结束标记
    'TMPL_VAR_IDENTIFY'     => 'array',     // 模板变量识别。留空自动判断,参数为'obj'则表示对象
    'TMPL_STRIP_SPACE'      => false,       // 是否去除模板文件里面的html空格与换行
    'TMPL_CACHE_ON'   => true,        // 是否开启模板编译缓存,设为false则每次都会重新编译
    'TMPL_CACHE_TIME' => -1,         // 模板缓存有效期 -1 为永久,(以数字为值,单位:秒)
    'TMPL_ACTION_ERROR'     => 'Public:success', // 默认错误跳转对应的模板文件
    'TMPL_ACTION_SUCCESS'   => 'Public:success', // 默认成功跳转对应的模板文件
    'TMPL_TRACE_FILE'       => THINK_PATH.'/Tpl/PageTrace.tpl.php',     // 页面Trace的模板文件
    'TMPL_EXCEPTION_FILE'   => THINK_PATH.'/Tpl/ThinkException.tpl.php',// 异常页面的模板文件
    'TMPL_FILE_DEPR'=>'/', //模板文件MODULE_NAME与ACTION_NAME之间的分割符,只对项目分组部署有效
    // Think模板引擎标签库相关设定
    'TAGLIB_BEGIN'          => '<', // 标签库标签开始标记
    'TAGLIB_END'            => '>', // 标签库标签结束标记
    'TAGLIB_LOAD'           => true, // 是否使用内置标签库之外的其它标签库,默认自动检测
    'TAGLIB_BUILD_IN'       => 'cx', // 内置标签库名称(标签使用不必指定标签库名称),以逗号分隔
    'TAGLIB_PRE_LOAD'       => '',   // 需要额外加载的标签库(须指定标签库名称),多个以逗号分隔
    'TAG_NESTED_LEVEL' => 3,    // 标签嵌套级别
    'TAG_EXTEND_PARSE'      => '',   // 指定对普通标签进行扩展定义和解析的函数名称。

    /* 表单令牌验证 */
    'TOKEN_ON'                    =>   true,     // 开启令牌验证
    'TOKEN_NAME'                =>   '__hash__',    // 令牌验证的表单隐藏字段名称
    'TOKEN_TYPE'                 =>    'md5',   // 令牌验证哈希规则

    /* URL设置 */
'URL_CASE_INSENSITIVE' => false,   // URL地址是否不区分大小写
    'URL_ROUTER_ON'         => false,   // 是否开启URL路由
    'URL_DISPATCH_ON'       => true, // 是否启用Dispatcher
    'URL_MODEL'      => 1,       // URL访问模式,可选参数0、1、2、3,代表以下四种模式:
    // 0 (普通模式); 1 (PATHINFO 模式); 2 (REWRITE 模式); 3 (兼容模式) 当URL_DISPATCH_ON开启后有效; 默认为PATHINFO 模式,提供最好的用户体验和SEO支持
    'URL_PATHINFO_MODEL'    => 2,       // PATHINFO 模式,使用数字1、2、3代表以下三种模式:
    // 1 普通模式(参数没有顺序,例如/m/module/a/action/id/1);
    // 2 智能模式(系统默认使用的模式,可自动识别模块和操作/module/action/id/1/ 或者 /module,action,id,1/...);
    // 3 兼容模式(通过一个GET变量将PATHINFO传递给dispather,默认为s index.php?s=/module/action/id/1)
    'URL_PATHINFO_DEPR'     => '/', // PATHINFO模式下,各参数之间的分割符号
    'URL_HTML_SUFFIX'       => '', // URL伪静态后缀设置

    /* 系统变量名称设置 */
    'VAR_GROUP'             => 'g',     // 默认分组获取变量
    'VAR_MODULE'            => 'm', // 默认模块获取变量
    'VAR_ACTION'            => 'a', // 默认操作获取变量
    'VAR_ROUTER'            => 'r',     // 默认路由获取变量
    'VAR_PAGE'              => 'p', // 默认分页跳转变量
    'VAR_TEMPLATE'          => 't', // 默认模板切换变量
'VAR_LANGUAGE'          => 'l', // 默认语言切换变量
    'VAR_AJAX_SUBMIT'       => 'ajax', // 默认的AJAX提交变量
    'VAR_PATHINFO'          => 's', // PATHINFO 兼容模式获取变量例如 ?s=/module/action/id/1 后面的参数取决于URL_PATHINFO_MODEL 和 URL_PATHINFO_DEPR


 /* 模板引擎设置 */
    'TMPL_ENGINE_TYPE' => 'Think',     // 默认模板引擎 以下设置仅对使用Think模板引擎有效
    'TMPL_DETECT_THEME'     => false,       // 自动侦测模板主题
    'TMPL_TEMPLATE_SUFFIX' => '.html',     // 默认模板文件后缀
    'TMPL_CACHFILE_SUFFIX' => '.php',      // 默认模板缓存后缀
    'TMPL_DENY_FUNC_LIST' => 'echo,exit', // 模板引擎禁用函数
    'TMPL_PARSE_STRING'     => '',          // 模板引擎要自动替换的字符串,必须是数组形式。
    'TMPL_L_DELIM'          => '{',   // 模板引擎普通标签开始标记
    'TMPL_R_DELIM'          => '}',   // 模板引擎普通标签结束标记
    'TMPL_VAR_IDENTIFY'     => 'array',     // 模板变量识别。留空自动判断,参数为'obj'则表示对象
    'TMPL_STRIP_SPACE'      => false,       // 是否去除模板文件里面的html空格与换行
    'TMPL_CACHE_ON'   => true,        // 是否开启模板编译缓存,设为false则每次都会重新编译
    'TMPL_CACHE_TIME' => -1,         // 模板缓存有效期 -1 为永久,(以数字为值,单位:秒)
    'TMPL_ACTION_ERROR'     => 'Public:success', // 默认错误跳转对应的模板文件
    'TMPL_ACTION_SUCCESS'   => 'Public:success', // 默认成功跳转对应的模板文件
    'TMPL_TRACE_FILE'       => THINK_PATH.'/Tpl/PageTrace.tpl.php',     // 页面Trace的模板文件
    'TMPL_EXCEPTION_FILE'   => THINK_PATH.'/Tpl/ThinkException.tpl.php',// 异常页面的模板文件
    'TMPL_FILE_DEPR'=>'/', //模板文件MODULE_NAME与ACTION_NAME之间的分割符,只对项目分组部署有效
    // Think模板引擎标签库相关设定
    'TAGLIB_BEGIN'          => '<', // 标签库标签开始标记
    'TAGLIB_END'            => '>', // 标签库标签结束标记
    'TAGLIB_LOAD'           => true, // 是否使用内置标签库之外的其它标签库,默认自动检测
    'TAGLIB_BUILD_IN'       => 'cx', // 内置标签库名称(标签使用不必指定标签库名称),以逗号分隔
    'TAGLIB_PRE_LOAD'       => '',   // 需要额外加载的标签库(须指定标签库名称),多个以逗号分隔
    'TAG_NESTED_LEVEL' => 3,    // 标签嵌套级别
    'TAG_EXTEND_PARSE'      => '',   // 指定对普通标签进行扩展定义和解析的函数名称。

    /* 表单令牌验证 */
    'TOKEN_ON'                    =>   true,     // 开启令牌验证
    'TOKEN_NAME'                =>   '__hash__',    // 令牌验证的表单隐藏字段名称
    'TOKEN_TYPE'                 =>    'md5',   // 令牌验证哈希规则

    /* URL设置 */
'URL_CASE_INSENSITIVE' => false,   // URL地址是否不区分大小写
    'URL_ROUTER_ON'         => false,   // 是否开启URL路由
    'URL_DISPATCH_ON'       => true, // 是否启用Dispatcher
    'URL_MODEL'      => 1,       // URL访问模式,可选参数0、1、2、3,代表以下四种模式:
    // 0 (普通模式); 1 (PATHINFO 模式); 2 (REWRITE 模式); 3 (兼容模式) 当URL_DISPATCH_ON开启后有效; 默认为PATHINFO 模式,提供最好的用户体验和SEO支持
    'URL_PATHINFO_MODEL'    => 2,       // PATHINFO 模式,使用数字1、2、3代表以下三种模式:
    // 1 普通模式(参数没有顺序,例如/m/module/a/action/id/1);
    // 2 智能模式(系统默认使用的模式,可自动识别模块和操作/module/action/id/1/ 或者 /module,action,id,1/...);
    // 3 兼容模式(通过一个GET变量将PATHINFO传递给dispather,默认为s index.php?s=/module/action/id/1)
    'URL_PATHINFO_DEPR'     => '/', // PATHINFO模式下,各参数之间的分割符号
    'URL_HTML_SUFFIX'       => '', // URL伪静态后缀设置

    /* 系统变量名称设置 */
    'VAR_GROUP'             => 'g',     // 默认分组获取变量
    'VAR_MODULE'            => 'm', // 默认模块获取变量
    'VAR_ACTION'            => 'a', // 默认操作获取变量
    'VAR_ROUTER'            => 'r',     // 默认路由获取变量
    'VAR_PAGE'              => 'p', // 默认分页跳转变量
    'VAR_TEMPLATE'          => 't', // 默认模板切换变量
'VAR_LANGUAGE'          => 'l', // 默认语言切换变量
    'VAR_AJAX_SUBMIT'       => 'ajax', // 默认的AJAX提交变量
    'VAR_PATHINFO'          => 's', // PATHINFO 兼容模式获取变量例如 ?s=/module/action/id/1 后面的参数取决于URL_PATHINFO_MODEL 和 URL_PATHINFO_DEPR

继承
继承使用的场景:
当别人有,自己没有,还想要,去继承那个人
继承的格式
class A extends B{}
如果A类继承了B类,A类中就拥有了B类中所有成员属性和成员方法,但是除了私有成员
访问权限(继承等级:321)

        public          protected       private

在类的外部 ok no no
在子类中 ok ok no
在本类中 ok ok ok
public等级为3,protected等级为2,private等级为1;
子类对父类方法的重写(覆盖)

当子类出现与父类同名的方法时,就是对父类方法的覆盖重写
如果调用该方法,调用时优先调用本类的方法(子类的方法)
在子类中调用父类中的成员方法:

parent::方法名()
PHP只支持单继承

一个子类只能有一个父类,但是一个类可以被多个子类继承;
可以有多层继承关系;
如果A类继承了B类,B类继承了C类,D类继承了A类,
D类就同时拥有了ABC三个类的所有的非私有的成员属性和成员方法;
如果需要使用多个类的功能时,可以链式继承

class A extends B {}
class B extends C {}
class D extends A {}

final 关键字 最终 常量

final 关键字只能用来修饰方法和类;
被final修饰的类不能被继承,不允许有子类
被final修饰的成员方法,不能被子类覆盖(重写)
作用:为了安全;没有必要;
static关键字 静态

可以和PPP修饰符一起来修饰成员属性(静态属性)和成员方法(静态方法);不需要使用new关键字来实例化对象就可以直接访问和调用

访问形式:
在类的外部 类名::$属性名 类名::方法名()
在类的内部 self::$属性名 self::方法名()

在静态方法中不允许使用$this 关键字
在静态方法中只能访问静态属性和静态方法
静态属性是作为该类对象的共有属性存在的
static 应用
单模式设计模式(单例,单件)

在当前脚本中只产生一个该类对象
在同脚本中一个类只能有一个实例化对象存在

具体的方法:
1,阻止在类的外部使用new 关键字来创建对象
将构建方法私有化
2,在类的内部创建一个对象
声明静态方法,在类的内部创建对象
3,将创建的对象存入一个位置,存档,作为判断的依据
声明静态方法来存放对象,存档
单态设计模式代码:

<?php
/*
===================================================
    static静态模式应用:
    在当前脚本中只产生一个该类对象,
    在同脚本中一个类只能有一个实例化对象存在
方法:1,阻止在类的外部使用new关键字来创建对象
        //将构造方法私有化
    2,在类的内部创建一个对象
        //声明静态方法 在类的内部创建对象
    3,将创建的对象存入一个位置,存档,作为判断的依据 
        //声明静态方法来存放对象 存档
====================================================
*/
      class Demo{
          static public $obj= null;//定义一个静态属性
          private function __construct(){
              echo "实例化了一个对象";
          }
          static public function getobj(){
              if(self::$obj == null){
                  $ob = new Demo();
                  self::$obj=$ob;
              }
              return self::$obj;
          }
      }
      Demo::getobj();
      Demo::getobj();
      Demo::getobj();
      Demo::getobj();
      //以上结果只会输出一次

面向对象

对象

具有一定功能和特征的事物就是对象
能满足某种需求的事物就是对象
对象就是一个具体的东西

具有相同功能和特征的对象的抽象就是类;思想上的
类就是一系列的东西和过程的一种总结和抽象
对象和类之间的关系

我们在使用过程中,不能直接使用类,而是需要一个而具体的对象,根据类来产生对象,
对象是由类产生的;

类的声明

class 类名 {}
成员属性(成员变量)

指的是一些特性,姓名,年龄,性别,是可变的;
注意: 1,成员属性在声明是必须加修饰符(3p)
2,成员属性的初始值可有可无;
3,成员属性在赋值时不能使用变量及函数调用
4,成员属性在赋值时可使用常量,运算

成员方法(成员函数)

指的是一些功能,行为,动作。他就是函数;
注意: 1,在定义成员方法时修饰符可有可无,如果不加默认public;
2,参数可有可无
3,返回值可有可无;

对象的实例化

格式:$var=new 类名()
对象->属性

对象访问符,相当于汉语中的 ‘的’;
对象访问成员属性时,不要加$,除非是可变变量;
对象赋值:$object -> 成员属性 = ‘值’;

$this 关键字

this本上就有这个的意思
$this在成员方法中使用,代表的是当前类的这个对象;
哪个对象来调用当前这个方法,$this就代表哪个对象;
调用这个方法前的对象是谁,$this就是代表谁;

构造方法

构造方法是一个特殊的成员方法
构造方法不需要对象加成员访问符来调用
当用new 关键字类实例化对象的时候会自动触发构造方法
方法名:__construct
与类名同名的方法也称之为构造方法
作用:初始化当前对象

析造方法

当该类对象在销毁时,自动触发
方法名:__destruct
销毁的几种情况:脚本执行完;unset;重新赋值;

以下是代码部分:

<?php
     
    //定义一个类;
    class Person{
        //成员属性
        public $name;
        public $age;
        public $sex;
 
        //构造方法
        public function __construct($n,$a,$s){//__construct在new 一个对象是自动触发,初始化属性
            $this->name=$n;//$this 只能用在成员方法中,指的是当前的这个对象;
            $this->age=$a;
            $this->sex=$s;
        }
 
        //成员方法
        public function test(){
            echo "成员方法就是成员函数";
        }
 
        //析构方法
        public function __destruct(){//析构方法不需要任何参数
            echo "析构方法在对象销毁时自动触发";
        }
    }
 
    //实例化对象,类不能直接用,而是通过实例化出一个而对象,用的是对象
    $a=new Person();
 
    echo $a->name;//访问成员属性
    $a->test();//调用成员函数