PHP教程

原文链接

基本语法

数组

array_chunk($array, $size): 将数组按size大小分为多个数组
array_diff($a, $b): 比较数组的不同,可以用来判断两个数组是否相等,需要注意的是这里返回的是在array1中但是不在array2中的值,而不是两个的交集
array_key_exists("key",$a)  # 查看key是否存在于某个字典
array_merge()           # 合并数组,相同的key直接覆盖
array_merge_recursive() # 合并数组,相同的key不覆盖
array_push($source, "red", "gree")  # 给数组添加元素
array_search(): 搜索一个key的索引
array_search(strtolower($search), array_map('strtolower', $array)): array_search忽略大小写
array_slice($arr, 0, 1) # 数组分片
array_sum($arr): 计算数组中所有值的和
count()函数:输出数组的长度
empty()函数:判断数组是否为空
end()       // 返回当前数组的最后一个值,需要注意的是这个函数不仅仅是返回最后一个值,还会把数组当前的指针指向最后一个数据
implode(',', $arr)  # 将数组拼接成字符串
in_array('a', $a)               # 查看数组是否存在某个元素
json_encode($arr)   # 数组转换城字符串
rsort(): 以降序对数组排序
sort():排序,可以给数组排序
uasort($array, $cmp_function)   # 定义对比函数进行排序
unset(arr[1]): 删除数组元素

foreach($array as $value): 数组遍历
foreach($array as $key => $value): 数组(字典)遍历
func(*list): 将数组作为函数的输入
  
# 在数组里面添加数组元素,在不确定key的情况下
$arr = [];
$arr['a'][] = 'a';
$arr['a'][] = 'b';

字符串

json_decode(string, $assoc=false)   # 将字符串转换为json对象,$assoc=true时返回array而不是object
mb_strlen($str, 'utf-8') # 求中文字符串长度
mb_substr($str, $start, $length, 'utf-8'): 字符串分割,可以分割中文哟,如果要获得所有右边的,那么$length不用填或者填上NULL,如果版本不行那就是用功能弱一点的substr
nl2br() # 将字符串中的\n转换成网页的换行符<br>
strlen() # 求字符串长度
str_replace(搜索值,替换值,目标) # 字符串替换

strpos('abc', 'a'): 在字符串中查找第一次出现位置,没找到返回false
$a . $b . 'abc':字符串连接直接用点号
explode(',', $str)  # 字符串分割,第三个参数大于0表示限制分组数量
array_map('strrev', explode('-', strrev($a), 2))    # 字符串分割,逆向
iconv('utf-8', 'GBK', $data): 将字符编码从utf-8转换为GBK
join("&", $arr) # 拼接字符串
parse_str('name=wang&age=18'): 从查询字符串中解析到变量,可以得到$name和$age两个变量
preg_replace('/user_id=\d+&name=/', 'user_id=' . 1048 . '&name=', $code): 正则替换
preg_replace_callback('//', function($matches){return strtolower($matchs[0])}: 执行一个正则表达式搜索并且使用一个回调函数进行替换
preg_match('/Chongqing(?<right>.*)/', $string, $matches): 正则匹配,pattern参数前后必须加斜杠
sprintf("sahgoiahg%s", $a): 格式化输出
strtolower($str)/strtoupper($str): 大小写字符串
ucfirst($str): 将字符串首字母大写
ucwords($str): 将字符串每个单词首字母大写

数字

ceil()函数:向上取整
rand(min, max):产生随机数,不需要给初始值了现在
intval($val): 字符串转整数
int ip2long(string $ip_address):IP转换成整数值
string long2ip(string $proper_address):整数值转换成IP
number_format(float $number)    // 以千位分隔符方式格式化一个数字,返回字符串
sprintf('%04d', 2)  // 数字前补零

时间

time(): 获取当前时间戳
strtotime(''): 字符串转换为时间戳
gmdate("Y-m-d\TH:i:s\Z"): 获取GMT时区的时间

$beginToday=mktime(0,0,0,date('m'),date('d'),date('Y')):获取今天开始时的时间戳
$endToday=mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1:获取今天结束时的时间戳
$beginYesterday=mktime(0,0,0,date('m'),date('d')-1,date('Y')):获取昨天开始时的时间戳
$endYesterday=mktime(0,0,0,date('m'),date('d'),date('Y'))-1:获取昨天结束时的时间戳
$beginLastweek=mktime(0,0,0,date('m'),date('d')-date('w')+1-7,date('Y')):获取上周开始时的时间戳
$endLastweek=mktime(23,59,59,date('m'),date('d')-date('w')+7-7,date('Y')):获取上周结束时的时间戳
$beginThismonth=mktime(0,0,0,date('m'),1,date('Y')):获取本月开始时的时间戳
$endThismonth=mktime(23,59,59,date('m'),date('t'),date('Y')):获取本月结束时的时间戳
# 单独获取当前的年、月、日、时、分、秒等
date('Y-m-d H:i:s'); // 如果要单独获取或者修改格式,那么直接按照里面的格式修改即可
# 输出指定格式
date('Y-m-d H:i', time())

函数/类/对象

# public, private, projtected的区别:
public # 权限最多,可以内部调用,实例调用
protected   # 受保护类型,用于本类和继承类调用
private     # 私有类型,只有在本类中使用
  
# 对象的序列化和反序列化
serialize()
unserialize()
  
# 一些自省(反射)方法
get_class(className)            # 取得当前语句所在的类名
get_class_methods(className)    # 取得相应class所包含的所有的方法名
get_class_vars(clasName)        # 取得相应class所包含的所有的变量名
func_get_args()                 # 获取当前方法所有的参数
setAttribute($name, $value)     # 设置函数的属性或者直接设置函数的内部变量

# 根据类名知道类的定义文件
$reflector = new ReflectionClass('className');
echo $reflector->getFileName();

# 标准嘞StdClass
$obj->value # 直接获取其内部的变量
  
# trait: 一种代码复用机制,从基类继承的成员会被trait插入的成员所覆盖,优先顺序是来自当前类的成员覆盖了trait的方法,而trait则覆盖了被继承的方法。这是为了弥补PHP单继承的局限
# 例如可以写一个单例:
trait SingleInstance
{
  static private $instance = null;
  static public function getInstance(){
    if (!self::$instance) {
      self::$instance = new static();
    }
    return self::$instance;
  }
}
# 在其他类里面只需要use SingleInstance就行了。再比如,文档里面的例子
<?php
class Base {
    public function sayHello() {
        echo 'Hello ';
    }
}

trait SayWorld {
    public function sayHello() {
        parent::sayHello();
        echo 'World!';
    }
}

class MyHelloWorld extends Base {
    use SayWorld;
}

$o = new MyHelloWorld();
$o->sayHello();     // 输出的是Hello World
?>

发送CURL请求

字段参考: 可实现各种action操作,以及异步等操作

WEB程序

$_SERVER['REQUEST_METHOD']  # 返回数据提交的方式,GET、POST等
$_SERVER["SERVER_PORT"]     # 获取端口
$_SERVER['HTTP_HOST']       # 获取域名或主机地址
$_SERVER['SERVER_NAME']     # 获取域名或主机名
$_SERVER["REQUEST_URI"]     # 获取域名后的详细地址
$_SERVER['PHP_SELF']        # 获取PHP文件名
$_SERVER["QUERY_STRING"]    # 获取网址后的参数
$_SERVER['HTTP_REFERER']    # 获取来源url
parse_str(file_get_contents("php://input"),$post_vars); # 获取PUT数据
getallheaders       # 获取请求头
error_log('message')    # 把错误信息发送到web服务器的错误日志,或者到一个文件里,有长度限制

MySQL

mysql_errno():  # 打印SQL出错信息

异常处理

try{
    throw new Exception('soahg');
}catch(Exception $e){
    echo $e->getMessage();
}

帮助函数

gettype(): 获取变量类型
$obj instanceof A # 判断对象是否属于某个类,不过判断是不是数组只能用is_array()  # 判断是否是数组
is_string() # 判断是否是字符串
is_object() # 判断是否是object
is_bool()   # 是否是布尔值
is_int()    # 是否是整数
is_integer()# 是否是整数
is_float()  # 是否是浮点数
is_real()   # 是否是实数
is_numeric  # 是否是数字或者数字字符串

interface_exists()  # 检查接口是否已经定义
class_exists()      # 检查类是否已经定义
  
PHP_INT_MAX # 最大整数
PHP_INT_MIN # 最小整数
  • @操作符: 错误控制运算符,写在一行的前面,可以控制改行不输出warning信息或错误信息

  • var_dump(变量名):打印变量,这个函数还会打印变量的类型可以把一个变量的各个部分全部信息输出,包括每个部分的数据类型和长度等信息,但是默认情况下,输出有限制,如果层数深了或者数据长了可能会表示成省略号,可以在C:\wamp\bin\apache\\apache2.4.9\bin\php.ini里面修改xdebug节点,添加如下内容

    xdebug.var_display_max_children=128
    xdebug.var_display_max_data=512
    xdebug.var_display_max_depth=5
    另外,将var_dump的输出转换为一个字符串以便web前端显示,可以这样用:
    ob_start();
    var_dump($data);
    $result = ob_get_clean();

    或者用另外的函数

    var_export: 输出或返回一个变量的字符串表示

  • file_get_contents:获取文件或http内容,如果要从http获得json数据可以直接使用它

  • isset():查看某个变量是否已经被定义,未赋值或赋NULL都会返回false

  • @header('Content-type: text/html;charset=UTF-8');PHP文件中添加中文支持,在脚本开始的地方添加给行即可

  • 多行输出:其中最后一个EOF必须写在一行的开头,且里面如果要用变量这样用{ $php_var }
    echo <<<EOF
    内容
    EOF;

  • print_r:打印关于变量的易于理解的信息。如果给出的是 string、integer 或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。这点在调试的时候很有用

  • 类的方法尽量写成static,速度比public快

composer包管理

require是指在生产环境中必须的包,而require-dev则是开发的时候要用而生产环境无需用的包,常用命令:

composer config --list  # 列出当前所有的配置
composer show   # 获取所有安装的包的列表
composer require package_name --dev # 安装包,并将其写入composer.json的require-dev中去

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342

推荐阅读更多精彩内容

  • 编程题: 1. 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名 例如:http://www.si...
    dragonwarrior阅读 735评论 1 2
  • 一、php可以做什么 php是一种可以在服务器端运行的编程语言,可以运行在Web服务器端。 php是一门后台编程语...
    空谷悠阅读 3,086评论 4 97
  • “年度最值得信赖”的培训机构千锋教育,一直秉承“用良心做教育”的理念,致力于打造IT教育全产业链人才服务平台,同期...
    摩洛哥的日光阅读 284评论 0 0
  • 从始而终,从终而始
    邻人阅读 102评论 0 0
  • 这几天发生了很多事儿。 大学同学从杭州过来出差开拓业务,约了几个同学小聚一下。吃饭,居然愉快的聊到10点半,意犹未...
    仇华力阅读 346评论 0 3