[root@wadeyu nginx-1.15.11]# ll | awk -F ' ' 'BEGIN {cnt=0} {print $0; if(index($1, "d")==1){cnt++;}} END {print "cnt:", cnt;}'
- echo, print, print_r, var_dump, var_export区别
- echo: 语言结构,输出一个或多个字符串,没有返回值
- print: 语言结构,只支持一个参数,有返回值且为1
- print_r: 函数,以易于理解(人类易读)的格式打印/返回变量内容
- var_dump: 函数,打印变量的相关信息,包括类型和值
- var_export: 函数,输出/返回变量合法的php代码字符串
- include, require, include_once, require_once区别
- include:
- 1.语言结构,包含并运行指定文件,文件不存在时,发出E_WARNING级别的警告错误,脚本会继续执行;
- 2.失败时返回false,成功时,若脚本中未显示指定返回值则返回true;
- 3.被包含文件的做用域范围跟include语句所在的行做用域同样,函数和类是全局做用域;
- 4.相对路径搜索规则:step1: include_path指定的路径下寻找; step2: 调用脚本文件所在的目录寻找; step3: 执行程序当前的工做目录寻找;
- 5.非php指令(<?php xxx; ?>)包含的内容,会当作普通文本输出;
- require: 几乎跟include同样,被包含的文件不存在时,会报E_COMPILE_ERROR级别的错误,会中断脚本执行
- include_once: 跟include语句相似,只会包含一次文件,对已包含的文件不会再次包含,若被包含的文件有返回值,第一次包含会获得返回值,第二次包含会返回true
- require_once:跟require语句相似,同一个文件屡次包含,只会包含一次,如有返回值,第一次包含会正常返回,后面包含返回true
- 类自动加载机制
- 1.实现__autoload函数,自定义加载类,参数是类名,php>=7.2不建议使用
- 2.使用spl_autoload_register函数注册任意数量的类的自动加载器,该函数会把注册的自动加载器加入到__autoload函数队列中,按定义时的顺序逐个执行
function fib(int $n){
if ($n < 3){
return 1;
}
return fib($n-1) + fib($n-2);
}
function fibVer2(int $start, int $n, int $prev1 = 1, int $prev2 = 1){
if ($n < 3){
return 1;
}
if ($start >= $n - 2){
return $prev1 + $prev2;
}
return fibVer2($start+1, $n, $prev2, $prev1 + $prev2);
}
- 模拟摇色子,根据设置的几率返回对应的点数,好比1,2,3,4,5几率是10%,6点的几率是百分之50
- 根据数字范围区间近似计算几率
function getBetNum(array $aBetRate = array()){
$total = array_sum($aBetRate);
$rand = mt_rand(0, $total);
$range = 0;
foreach($aBetRate as $num => $rate){
$range += $rate;
if($rand <= $range){
return $num;
}
}
return -1;
}
function isValidPhone($phone){
return preg_match('/(^\d{3,4}\s*\-\s*\d{8}$)|(^1\d{10}$)/', $phone) === 1;
}
// 测试用例
$aPhone = ['0791-12341234', '0791 - 12341234', '010-81234123', '010 - 81234123', '123-a1133333', '15817423635', '23423423412', '1567894'];
foreach($aPhone as $phone){
echo $phone, ',result:', (isValidPhone($phone) ? 'valid' : 'invalid'), "\n";
}
- 类中有哪些魔术方法以及用途
- __construct([mixed $args[,...]]):void 构造函数,每次建立新对象时调用的方法,很是适合使用对象以前作一些初始化工做
- __destruct(void):void 析构函数,对象被销毁时执行
- __set(string $name, mixed $value):void 对对象不存在属性赋值时被调用
- __get(string $name):mixed 访问对象不存在属性时被调用
- __isset(string $name):bool 对对象不存在属性使用isset或者empty判断时被调用
- __unset(string $name):void 对对象不存在熟悉使用unset时被调用
- __call(string $name, array $arguments):mixed 调用对象中不存在的方法是被调用
- static __callStatic(string $name, array $arguments):mixed 在静态上下文中调用一个不可访问方法时被调用
- __sleep(void):array 使用serialize函数序列化对象以前被调用,能够用于清理对象,并返回一个对象中应被序列化的变量名称的数组。
- __wakeup(void):void 使用unserialize函数反序列化时,首先会检查是否存在__wakeup魔术方法,若是存在则被调用,用于预先准备对象须要的资源
- __toString ( void ):string 一个对象被当作字符串时,该怎么处理,必须返回字符串
- __invoke ([ $... ] ):mixed 对象当作函数来使用时被调用
- static __set_state ( array $properties ):object 使用var_export导出对象时,静态方法被调用,参数是对象属性列表
- __debugInfo ( void ):array 使用var_dump函数打印对象以前被调用,返回的内容就是var_dump打印的内容
- 设置cookie一小时过时使用time()+3600仍是gmtime()+3600?
- 能够设置cookie的函数: setcookie 内容会urlencode,setrawcookie 发生原始内容,不会被urlencode
- 过时时间须要传unix时间戳,因此应使用跟时区无关的函数time()+3600
- gmtime函数:内置扩展中不包括此函数 :(
参考资料