语法
- &:引用值,非拷贝
- @:抑制报错
- $$:定义可变变量(引用传递),意义不明
$str = 'world';
$first = "hello";
$hello = "$str";
echo $first . " " . $$first;
// 输出:hello world
- $val():可变函数
- <=>:组合比较,等于返回0,否则返回1/-1
?:
:简写三目# 这句输出 'str' echo 'str' ?: 'false';
??
:判空,返回从左到右第一个不为空的变量
关键字
- do-while:类似于while,先执行后判断,即使为false也会执行一次,当第一次条件不为false时和while基本没区别.
- foreach:遍历数组,
foreach($arr as &$value){}
- goto:跳转到指定位置,用return结束代码块.
- break:结束当前循环,加n可以指定跳出多少层循环,不加默认1.
- continue:终止本次循环,不执行后续代码块并进入下一次循环,同样可以加n.
- namespace:命名空间,用于同名函数,调用时使用
use function first\func;func();
或者second\func();
注释规范
/**
* @name 名字
* @abstract 申明变量/类/方法
* @access 指明这个变量、类、函数/方法的存取权限
* @author 函数作者的名字和邮箱地址
* @category 组织packages
* @copyright 指明版权信息
* @const 指明常量
* @deprecate 指明不推荐或者是废弃的信息MyEclipse编码设置
* @example 示例
* @exclude 指明当前的注释将不进行分析,不出现在文挡中
* @final 指明这是一个最终的类、方法、属性,禁止派生、修改。
* @global 指明在此函数中引用的全局变量
* @include 指明包含的文件的信息
* @link 定义在线连接
* @module 定义归属的模块信息
* @modulegroup 定义归属的模块组
* @package 定义归属的包的信息
* @param 定义函数或者方法的参数信息
* @return 定义函数或者方法的返回信息
* @see 定义需要参考的函数、变量,并加入相应的超级连接。
* @since 指明该api函数或者方法是从哪个版本开始引入的
* @static 指明变量、类、函数是静态的。
* @throws 指明此函数可能抛出的错误异常,极其发生的情况
* @todo 指明应该改进或没有实现的地方
* @var 定义说明变量/属性。
* @version 定义版本信息
*/
function func(){
// 鬼知道为什么要写在函数上面,太怪了
}
Class 类
- 关于类
类的命名规则采用单词首字母全大写的方式,如 PluginInterface
.如果引用了其他文件中的类,并且可能存在重名类则采用 use Typecho\Widget\Helper\Form\Element\Radio as Typecho_Widget_Helper_Form_Element_Radio;
的方式命名.
但类名是不区分大小写的.
- 作用域
作用域有三种: public
, private
和 protected
,后两种只能在类内调用.
class DatabaseConnection{
const PORT = 3307;
public $dbHost = 'kazusa.cc';
private $dbUser = 'user';
protected $dbPassword = 'pwd';
public function result(){
$rs = $this->dbUser . $this->dbPassword; // 调用后两种作用域变量
echo self::PORT; // 类内调用常量
$this->test(); // 调用其他方法
return $rs;
}
}
$obj = new DatabaseConnection; // 实例化,括号加不加都行
echo $obj->result(); // 调用公有函数
echo $obj::PORT; // 调用常量
echo $obj->dbHost; // 调用公有变量
- 修饰符
也有三种: const
, final
, static
.
目前还不清楚怎么用后两种.
超☆级☆全☆局☆变☆量
$GLOBALS
:储存的是全部变量,键为变量名,全作用域可用$_SERVER
:服务器信息,如脚本路径,头信息等$_REQUEST
:表单数据,对于正常fetch提交表单来说,POST是接收不到的,这个应该可以(有待查证)$_GET&$_POST
:顾名思义$_FILES
:?$_ENV
:顾名思义,基本用不着$_COOKIE
:setcookie(name, value, expire, path, domain);,就我而言,只需要前三个参数就够了(其实不用也行)$_SESSION
:使用前必须session_start();,在登出场景中使用session_destroy();来销毁会话
在使用地址重写时发现,$_SERVER可以获取到当前URL的请求参数部分,而其他两种方法则只能获取到重写规则内添加的参数.比如当前URL实际请求三个参数,但重写时抹除了?后的内容并重新写了一个参数,则$_SERVER可以获取三个,$_GET只能获取一个.
函数
parse_url()
:顾名思义,填入一个(完整的)URL,然后就会生成一个长度为4的数组,键值是后面这四个.(scheme,host,path,query
),值得一提的是不完整的也行.以//
开头则显示后三个参数,直接以域名开头只有最后两个,以相对路径也是两个.extract($arr)
:将二维数组中的键作为变量名,值作为变量值,返回值为设置成功的条数(高危,但平时用方便.explode()
:分割字符串为数组,需要注意的是分割符在前,需要被分割的字符串在后.implode()
:逆explode(),使用拼接符连接数组,同样连接符在前.join()
: implode 别名, 等效.extract($row)
: 将变量从数组导入到当前
# 记录一些可能用到的代码
# 获取 IP
function getIP()
{
if (getenv('HTTP_CLIENT_IP')) {
return getenv('HTTP_CLIENT_IP');
} elseif (getenv('HTTP_X_FORWARDED_FOR')) {
return getenv('HTTP_X_FORWARDED_FOR');
} elseif (getenv('HTTP_X_FORWARDED')) {
return getenv('HTTP_X_FORWARDED');
} elseif (getenv('HTTP_FORWARDED_FOR')) {
return getenv('HTTP_FORWARDED_FOR');
} elseif (getenv('HTTP_FORWARDED')) {
return getenv('HTTP_FORWARDED');
} else {
return $_SERVER['REMOTE_ADDR'];
}
}
字符串
trim()
:去除字符串首尾的特殊符号/指定的字符(可选)strcmp()
:比较两个字符串,返回int型,0为完全相等.(还有一个不区分大小写的)str_split()
:也是分割字符串,按(字节)长度,因为中文占三字节,个人感觉不适用于中英混合的情况strpos()
:定位字符串第一次出现的位置,并返回下标.第三个参数是offset.区分大小写strrpos()
:定位最后一次出现的位置.stripos()
:同strpos(),不区分大小写.strripos()
:定位最后,不区分.strstr()
:查找首次出现的位置,并返回一半(这到底有什么用?)strchr()
:查找最后一次并返回.substr()
:截取字符串.substr_count()
:检索出现字符串的次数.substr_replace()
:字符串替换,可以设置替换的长度,为0是插入str_replace()
:替换字符串(更常用)strrev()
:字符串反转
数组
array_key()
:获取所有键命,返回数组,value也一样in_array()
:返回布尔值array_search
:搜索值返回键名,否则返回falsearray_key_exists()
:搜索键,返回布尔值
数组元素操作
- 添加删除
array_pop()
:删除最后一个并返回值
array_push()
:在数组末尾添加一个或多个元素
array_shift()
:删除第一个元素并返回值
array_unshift()
:在数组开头添加~
array_unique()
:删除重复元素
unset()
:删除指定位置的元素
- 切片合并
array_merge()
:合并多个数组
array_rand()
:随机选出多个元素为新数组并返回
array_slice()
:截取指定长度和偏移,返回新数组
懒得写了,剩下的基本用不着.
没有评论