phpstorm常用快捷键

 https://segmentfault.com/a/1190000004225643

查询快捷键


CTRL+N 查找类


Ctrl+Shift+J快捷键,所有多余的字符(空格,引号和加号)被去掉了


CTRL+SHIFT+N 全局搜索文件 ,优先文件名匹配的文件

CTRL+SHIFT+ALT+N 查找php类名/变量名 ,js方法名/变量名, css 选择器


CIRL+B 找变量的来源,跳到变量申明处 (CTRL+ 鼠标单击 也可以)


CTRL+ALT+B 找到继承该接口或者父级 的所有子类, 统计所有子类个数


CTRL+SHIFT+B 找变量的类 (不太懂欢迎评价)


CTRL+G 定位行,跳转行


CTRL+F 在当前窗口查找文本


CTRL+SHIFT+F 在指定路径查找文本字符


CTRL+R 当前窗口替换文本


CTRL+SHIFT+R 在指定路径替换文本


CTRL+E 最近打开的文件

自动代码


CTRL+J 自动代码提示,自动补全


也可以直接输入对应的简拼,按下tab键即可(类似linux命令补全)


ALT+回车 导入包,自动修正

  • CTRL+ALT+L 格式化代码
  • CTRL+ALT+I 自动缩进
  • CTRL+ALT+SPACE 类名或接口名提示(与系统冲突) 提示类名关键字 (abstract public …)


CTRL+P 方法参数提示,显示默认参数


ALT+INSERT 生成代码(如GET,SET方法,构造函数等) , 光标在类中才生效


CTRL+ALT+O 优化导入的类和包 需要配置


CTRL+SHIFT+SPACE 切换窗口

CTRL+SPACE空格 代码自动完成,代码提示,一般与输入法冲突

  • CTRL+ALT+T 把选中的代码放在TRY{} IF{} ELSE{} 里

复制快捷方式


  • F5 复制文件/文件夹

  • CTRL+C 复制
  • CTRL+V 粘贴
  • CTRL+X 剪切,删除行
  • Ctrl + Y 删除行插入符号
  • CTRL+D 复制行 , 快速分布li标签等

  • CTRL+SHIFT+V 可以复制多个文本,将前几次复制的文本保存下来了

高亮


  • SHIFT+F2 高亮错误或警告快速定位错误,多个错误循环高亮

本地历史VCS/SVN


  • Ctrl + K 提交项目VCS
  • Ctrl + T 更新项目从VCS
  • Alt + Shift + C 查看项目最近文件版本变化文件 , CTRL+E 只是查看修改过的文件

  • Alt + ` (table 上面的点) 快速弹出VCS菜单

其他快捷方式


  • CTRL+Z 倒退(代码后悔)
  • CTRL+SHIFT+Z 向前
  • CTRL+H 显示类层级关系图,继承/实现关系

  • Ctrl +F12 文件结构弹出 类似 ALT + 7

  • CTRL+W 块状选中代码,连续按会有其他效果 Ctrl+Shift+W 减少当前选择到以前的状态

  • CTRL+O 魔术方法, 在php类体中有效

  • ctrl+shift+i 快速查看变量或方法定义源 , 也可以鼠标按住+CTRL

  • CTRL+ALT+F12 资源管理器打开文件夹,跳转至当前文件在磁盘上的位置

  • CTRL+ [] 光标移动到{}[]开头或结尾位置

  • CTRL+SHIFT+[] 直接选中块代码 = CTRL+W 按好几下

  • SHIFT+ALT+INSERT 竖编辑模式

  • CTRL+/ 单行注释/取消注释
  • CTRL+SHIFT+/ 块状注释/取消块状注释
  • Ctrl+Shift+U 选中的字符大小写转换
  • ctrl +
    ‘-/+’:可以折叠项目中的任何代码块,包括htm中的任意nodetype=3的元素,function,或对象直接量等等。它不是选中折叠,而是自动识别折叠。
  • ctrl + ‘.’: 折叠选中的代码的代码
  • CTRL+ALT←/→ 返回上次编辑的位置
  • ALT+←/→ 切换代码视图,标签切换
  • ALT+↑/↓ 在方法间快速移动定位
  • ctrl+shift+enter(智能完善代码 如if())

  • ctrl+shift+up/down (移动行、合并选中行,代码选中区域向上/下移动)
  • SHIFT+F6 重命名,重构当前区域内变量重命名/重构
    不但可以重命名文件名,而且可以命名函数名,函数名可以搜索引用的文件,还可以重命名局部变量。还可以重命名标签名。

  • alt +
    ‘7’:显示当前的类/函数结构。类似于eclipse中的outline的效果。试验了一下,要比aptana的给力一些,但还是不能完全显示prototype下面的方法名。

  • Alt + Shift + I 检查当前文件与当前的配置文件

编辑


  • Ctrl + Q 快速文档查询
  • ALT + INSERT 生成的代码…器(getter,setter方法,构造函数)
  • Ctrl + O 覆盖方法
  • Ctrl + I 实现方法
  • Ctrl + J 活动代码提示
  • Alt + Enter 显示意图的行动和快速修复
  • Shift + Tab 键缩进/取消缩进选中的行
  • Ctrl + Shift + J 智能线连接(仅适用于HTML和JavaScript)
  • Ctrl + Enter 智能线分割(HTML和JavaScript)
  • Shift + Enter 开始新的生产线
  • Ctrl + Delete 删除字(word)
  • Ctrl + Backspace 删除整个字 ,单纯Backspace单个字符删除

运行


  • Alt + Shift + F10 选择的配置和运行
  • Ctrl + Shift + X 运行命令行
  • Alt + Shift + F9 选择配置和调试
  • Shift + F10 运行
  • Shift + F9 调试
  • Ctrl + Shift + F10 运行范围内配置编辑器
  • Ctrl+Shift+H 方法的层次结构
  • Ctrl+Alt+H 呼叫层次
  • CTRL+Q 显示代码注释
  • ALT+F1 选择当前文件或菜单中的任何视图工具栏
  • CTRL+UP/DOWN 光标跳转到编辑器显示区第一行或最后一行下
  • ESC 光标返回编辑框
  • SHIFT+ESC 光标返回编辑框,关闭无用的窗口
  • CTRL+F4 关闭当前的编辑器或选项卡
  • Ctrl + Alt + V引入变量
  • Ctrl + Alt + F 类似引入变量
  • Ctrl + Alt + C引入常量
  • Ctrl + Tab 键切换选项卡和工具窗口
  • Ctrl + Shift + A 查找快捷键
  • Alt + #[0-9] 打开相应的工具窗口
  • Ctrl + Shift + F12 切换最大化编辑器
  • Alt + Shift + F 添加到收藏夹
  • Ctrl +反引号(`) 快速切换目前的配色/代码方案/快捷键方案/界面方案
  • Ctrl + Alt + S 打开设置对话框(与QQ冲突)

调试


  • F8步过
  • F7步入
  • Shift + F7智能进入
  • Shift + F8步骤
  • ALT + F9运行到光标
  • Alt + F8计算表达式
  • F9恢复程序
  • Ctrl + F8切换断点
  • Ctrl + Shift + F8查看断点

导航


  • Shift + Esc键隐藏活动或最后一个激活的窗口
  • Ctrl + Shift + F4关闭活动运行/消息/ /…选项卡
  • Ctrl + Shift + Backspace键导航到最后编辑的位置
  • Ctrl + Alt+B 到实施(S)
  • Ctrl + Shift+I 打开快速定义查询
  • Ctrl + U 转到super-method/super-class
  • Alt + Home 组合显示导航栏

书签


  • Ctrl + F11切换书签助记符
  • Ctrl +#[0-9]转到编号书签
  • Shift + F11显示书签

Esc键编辑器(从工具窗口)


  • F1 帮助千万别按,很卡!
  • F2(Shift+F2) 下/上高亮错误或警告快速定位
  • F3 向下查找关键字出现位置
  • F4 查找变量来源
  • F5 复制文件/文件夹
  • F6 移动
  • F11 切换书签
  • F12 返回到以前的工具窗口

轮询和长轮询

  1. 轮询:客户端定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并关闭连接。
    优点:后端程序编写比较容易。
    缺点:请求中有大半是无用,浪费带宽和服务器资源。
    实例:适于小型应用。
  2. 长轮询:客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。
    优点:在无消息的情况下不会频繁的请求。
    缺点:服务器hold连接会消耗资源。
    实例:WebQQ、Hi网页版、Facebook IM。

另外,对于长连接和socket连接也有区分:

  1. 长连接:在页面里嵌入一个隐蔵iframe,将这个隐蔵iframe的src属性设为对一个长连接的请求,服务器端就能源源不断地往客户端输入数据。
    优点:消息即时到达,不发无用请求。
    缺点:服务器维护一个长连接会增加开销。
    实例:Gmail聊天
  2. Flash Socket:在页面中内嵌入一个使用了Socket类的 Flash 程序JavaScript通过调用此Flash程序提供的Socket接口与服务器端的Socket接口进行通信,JavaScript在收到服务器端传送的信息后控制页面的显示。
    优点:实现真正的即时通信,而不是伪即时。
    缺点:客户端必须安装Flash插件;非HTTP协议,无法自动穿越防火墙。
    实例:网络互动游戏。

以上是四种请求方式的介绍和优缺点比较。

php 编码习惯

习惯的力量

命名非常重要

适当的使用注释

使用一个变量,需要初始化

function getDocs($id){

$ids = implode(“,”,$id);

$query = $this->db->query(“SELECT  *  FROM doc WHERE id IN($ids)”);

while($doc=$this->dv->fetch_array($query)){

$doc[‘rawtitle’]=$doc[‘title’];

$doc[‘title’]=htmlspecialchars($doc[‘title’]);

$docs[]=$doc;

}

return $docs;

//代码问题,如果数据库查不到数据会返回未定义。所以最好先定义 $docs=[]

}

优先使用单引号

$row[‘id’]的效率是$row[id]的7倍,默认id会去常量里边找

$user = array()

if(0=$uid){

$user[‘uid’]=0;

$user[‘groupid’]=0;

}else{

$user=$this->getUserByid($uid);

} //常量写前边,变量写后边容易发现错误

防御式编程思想

用自己可控的环境参数

  • 明确包含文件的路径
  • 给予恰当的默认值
  • 自定义错误报警的级别
  • 不依赖系统环境参数,程序要动态了解所处的环境

PHP结束标记可以省略

纯PHP代码不要结束  //end of file代替

嵌入式的代码必须要有结束标记

header头的编码

坚持字符编码统一

$phpcoding=PHP文件编码;

$tplcoding=模板编码;

$mysqlcoding = 数据库编码;

$phpcoding == $tplcoding==$mysqlcoding

error_reporting(7)

1:   E_ERROR

2:  E_WARNING

3: E_PARSE

杜绝

优先使用PHP内置函数

filter_var(‘zh851122@126.com’,FILTER_VALIDATE_EMALL);  //验证邮箱

get_extension($filename){

return_pathinfo($filename,PATHINFO_EXTENSION);

}

usort–使用用户自定义的比较函数对数组中的值进行排序

rawurlencode –按照RFC  1 738 对url 进行编码

parse_url–解析URL,返回其组成部分

http_build_query –生成URL-encode之后的请求字符串

exif_imagetype–判断一个图像的类型

levenshtein –计算两个字符串之间的编辑距离

uniqid–生成一个唯一id

get_browser –获取浏览器具有的功能

get_definen_vars–返回有所有已定义变量所组成的数组

str_word_count–返回字符串中单词的使用情况

laravel artisan命令 学习

c:\wamp\www\lv5>php artisan list

Laravel Framework version 5.0.13

Usage:

[options] command [arguments]

Options(选项):

–help (-h) Display this help message

                显示帮助信息

–quiet (-q) Do not output any message

                不输出任何消息

–verbose (-v|vv|vvv) Increase the verbosity of messages:

                1 for normal output, 2 for more verbose output and 3 for debug 

                增加冗长的消息:1 正常输出 2 更加详细的输出 3调试输出

–version (-V) Display this application version

                显示此应用程序的版本

–ansi Force ANSI output

                 强制用 ANSI码输出

–no-ansi Disable ANSI output

                 禁用用 ANSI码输出

–no-interaction (-n) Do not ask any interactive question

                不要问任何交互式问题

–env The environment the command should run under.

                在环境命令下运行

Available commands(可用的命令):

clear-compiled Remove the compiled class file

                清除编译后的类文件

down Put the application into maintenance mode

                使应用程序进入维修模式

env Display the current framework environment

                显示当前框架环境

fresh Remove the scaffolding included with the framework

            清楚包含框架外的支架

help Displays help for a command

            显示命令行的帮助

inspire Display an inspiring quote

                显示一个启发灵感的引用

list Lists commands

            列出命令

migrate Run the database migrations

             运行数据库迁移

optimize Optimize the framework for better performance

            为了更好的框架去优化性能

serve Serve the application on the PHP development server

            在php开发服务器中服务这个应用

tinker Interact with your application

            在你的应用中交互

up Bring the application out of maintenance mode

            退出应用程序的维护模式

app

app:name Set the application namespace

            设置应用程序命名空间

auth

auth:clear-resets Flush expired password reset tokens

                清除过期的密码重置密钥

cache

cache:clear Flush the application cache

            清除应用程序缓存

cache:table Create a migration for the cache database table

            创建一个缓存数据库表的迁移

config

config:cache Create a cache file for faster configuration loading

            创建一个加载配置的缓存文件 

config:clear Remove the configuration cache file

            删除配置的缓存文件

db

db:seed Seed the database with records

            发送数据库的详细记录

event

event:generate Generate the missing events and handlers based on registration

            在记录上生成错过的事件和基础程序

handler

handler:command Create a new command handler class

            创建一个新的命令处理程序类

handler:event Create a new event handler class

            创建一个新的事件处理程序类

key

key:generate Set the application key

            设置程序密钥

make

make:command Create a new command class

                生成一个命令类

make:console Create a new Artisan command

                生成一个Artisan命令

make:controller Create a new resource controller class

                生成一个资源控制类

make:event Create a new event class

                生成一个事件类

make:middleware Create a new middleware class

                生成一个中间件

make:migration Create a new migration file

                生成一个迁移文件

make:model Create a new Eloquent model class

                生成一个Eloquent 模型类

make:provider Create a new service provider class

                生成一个服务提供商的类

make:request Create a new form request class

                生成一个表单消息类

migrate

migrate:install Create the migration repository

                创建一个迁移库文件

migrate:refresh Reset and re-run all migrations

                复位并重新运行所有的迁移

migrate:reset Rollback all database migrations

                回滚全部数据库迁移

migrate:rollback Rollback the last database migration

                回滚最后一个数据库迁移

migrate:status Show a list of migrations up/down

                显示列表的迁移 上/下

queue

queue:failed List all of the failed queue jobs

                列出全部失败的队列工作

queue:failed-table Create a migration for the failed queue jobs database table

                创建一个迁移的失败的队列数据库工作表

queue:flush Flush all of the failed queue jobs

                清除全部失败的队列工作

queue:forget Delete a failed queue job

                删除一个失败的队列工作

queue:listen Listen to a given queue

                监听一个确定的队列工作

queue:restart Restart queue worker daemons after their current job

                重启现在正在运行的所有队列工作

queue:retry Retry a failed queue job

                重试一个失败的队列工作

queue:subscribe Subscribe a URL to an Iron.io push queue 去Iron.io

                订阅URL,放到队列上  

queue:table Create a migration for the queue jobs database table

                创建一个迁移的队列数据库工作表

queue:work Process the next job on a queue

                进行下一个队列任务

route

route:cache Create a route cache file for faster route registration

                为了更快的路由登记,创建一个路由缓存文件

route:clear Remove the route cache file

                清除路由缓存文件

route:list List all registered routes

                列出全部的注册路由 

schedule

schedule:run Run the scheduled commands

                运行预定命令

session

session:table Create a migration for the session database table

                创建一个迁移的SESSION数据库工作表

vendor

vendor:publish Publish any publishable assets from vendor packages

使用如下哪个接口,可实现对一个对象进行 foreach 遍历的功能?

因为php对象也是复合数据类型(还一种复合数据类型是数组),既然是复合数据类型,所以也能对其遍历,不过对对象的遍历其实就是对其属性的遍历

class  A{

public $name = ‘酱油’;

private $age = 18;

public $hobby = array();

public function test(){}

}

$a = new A;

foreach($a as $k=>$v){

var_dump($k,$v);

}

运行结果如下:

string(4) “name” string(6) “酱油” string(5) “hobby” array(0) { }

这里我们可以看到对象的遍历只遍历public属性(其实遍历也等于类外访问,限定修饰符依然有作用)

但是有的时候我们想对对象的遍历的时候,遍历的是其中的一个是数组的对象的元素,像上个例子中的hobby,如果我们想遍历对象的时候和遍历hobby属性的效果一样,那么我们需要实现Iterator这个接口,代码如下:

class  A implements Iterator{
public $name = ‘酱油’;
private $age = 18;
public $hobby = array(‘游泳’,’旅游’,’玩游戏’);
public function test(){}
public function addPlayer($p) {
$this->hobby[] = $p;
}
public function rewind() {     //初始化
reset($this->hobby);
}
public function valid() {      //合法性验证
return key($this->hobby) !== NULL;
}
public function current() {    //获得值变量
return current($this->hobby);
}
public function key() {       //获得键变量
return key($this->hobby);
}
public function next() {     //移动指针
next($this->hobby);
}
}
$a = new A;
foreach($a as $k=>$v){
var_dump($k,$v);
}

运行结果如下:

int(0) string(6) “游泳” int(1) string(6) “旅游” int(2) string(9) “玩游戏”

Foreach是根据当前对象所属类是否实现了Iterator接口来决定foreach遍历类型的。