平时还是能时常看到PHP的代码的,然而每次都看不懂,抽几天了解下基本语法,但求看得懂就行….不做深入考虑
毕竟是世界上最好的语言,还是要了解一下的2333
看了这几门语言现在感觉有点乱了…..额….
也差不多全了,我想了解的,Google的Go语言…..再说
基础知识
打印是用echo和shell类似~~当然使用print_r也是可以的
在php中字符串连接符是用点.
来表示的,这一点比较特殊,其它多数语言中是用加号+
来表示的
php声明变量、调用都需要在前面加$
在PHP中,支持8种原始类型,其中包括四种标量类型、两种复合类型和两种特殊类型。
PHP会自动把变量转换为自动的数据类型
boolean类型不区分大小写,true输出为1,否则什么也没有
空为null,不区分大小写
逻辑运算有and、or、xor(逻辑异或;有且仅有一个为true的情况)、!、&&、||(and与||相同但是有优先级问题)
可以用 define()
函数来定义常量,在 PHP 5.3.0 以后,可以使用 const 关键字在类定义之外定义常量。一个常量一旦被定义,就不能再改变或者取消定义。
常用系统常量:
(1)
__FILE__
:php程序文件名。它可以帮助我们获取当前文件在服务器的物理位置。
(2)__LINE__
:PHP程序文件行数。它可以告诉我们,当前代码在第几行。
(3)PHP_VERSION:当前解析器的版本号。它可以告诉我们当前PHP解析器的版本号,我们可以提前知道我们的PHP代码是否可被该PHP解析器解析。
(4)PHP_OS:执行当前PHP版本的操作系统名称。它可以告诉我们服务器所用的操作系统名称,我们可以根据该操作系统优化我们的代码。
获取常量还可以使用constant()
函数,接受一个str可以是常量名或者一个变量,返回这个常量的值;使用bool defined(string constants_name)
判断是否存在常量
foreach特点,常用的两种形式:
- 只取值,不要下标
数组为例:foreach (数组 as 值){}
汉字替换成变量即可 - 取下标和值
数组为例:foreach (数组 as 下标 => 值){}
可以将@放置在一个PHP表达式之前,该表达式可能产生的任何错误信息都被忽略掉
数组
PHP有两种数组:索引数组、关联数组。
索引和关联两个词都是针对数组的键而言的。通俗将:索引数组就是一般的我们使用的用下标的方式,关联数组就是用key-value的形式,类似java的map
可以使用$arr = array();
来创建一个空数组,也可用$fruit = array("苹果","香蕉","菠萝");
的方式来创建索引数组。可以使用print_r($fruit);
打印查看
对于数组的赋值,除了常规的方式,PHP还多了一种:用array()
创建一个空数组,使用=>
符号来分隔键和值,左侧表示键,右侧表示值。当然,索引数组中,键一定是整数。比如:array('0'=>'苹果');
循环取值除了常规的for循环也可以使用foreach,不过就是有点不习惯….两种数组都适用
1 |
|
函数
和js类似,使用关键字function来定义函数,PHP中也不允许函数返回多个值,只能是一个
这里有个在我看来很神奇的东西–可变函数
1 | function name() { |
神奇就在于把一个变量赋予一个函数名的字串,竟然就可以通过这个变量调用函数了!至于到底是怎么回事我就不深究了,毕竟只是了解的心态,知道有这样的用法就行了,便于动态调用我倒感觉这样写比较容易理解$func = name;
多好
个人认为最强大的还是内置函数,灰常多,灰常强大,常用的有
当我们创建了自定义函数,并且了解了可变函数的用法,为了确保程序调用的函数是存在的,经常会先使用function_exists('name')
判断一下函数是否存在。同样的method_exists('name')
可以用来检测类的方法是否存在。类是否定义可以使用class_exists;文件是否存在file_exists等
类和对象
和其他语言类似,也是有类与对象的定义,同样是用class作为关键字,举个栗子
1 |
|
比较让我在意的是:相对java来说,因为PHP中的.
相当于java中的+
;于是用->
表示java中的.
:java:this.name
在php写的话就是:$this->name
;嗯我乱说的…..23333
在类的定义的时候,属性、方法是支持使用修饰符的,比如方法默认就是public啊,还有protected、private、static;对于静态属性则使用::
双冒号进行访问不要用->
;静态方法中,$this
伪变量不允许使用。可以使用self,parent,static在内部调用静态方法与属性。
类属性必须定义为公有、受保护、私有之一。为兼容PHP5以前的版本,如果采用 var 定义,则被视为公有。
方法就是在类中的function,很多时候我们分不清方法与函数有什么差别,在面向过程的程序设计中function叫做函数,在面向对象中function则被称之为方法。
构造函数与析构函数
PHP5可以在类中使用__construct()
定义一个构造函数,具有构造函数的类,会在每次对象创建的时候调用该函数,因此常用来在对象创建的时候进行一些初始化工作。function __construct(){}
和java比的话这里有点区别,在子类中如果定义了__construct
则不会调用父类的__construct
,如果需要同时调用父类的构造函数,需要使用parent::__construct()
显式的调用。
PHP5支持析构函数,使用__destruct()
进行定义,析构函数指的是当某个对象的所有引用被删除,或者对象被显式的销毁时会执行的函数。可以使用unset($className);
回收对象进行测试,一般不需要手动调用
类似的,如果把构造函数私有化,那就不允许进行初始化了,比如单例模式
继承与重载
继承使用关键字extends,方法同可以进行覆盖
至于重载,就有些不同了
PHP中的重载指的是动态的创建属性与方法,是通过魔术方法来实现的。
属性的重载通过__set
,__get
,__isset
,__unset
来分别实现对不存在属性的赋值、读取、判断属性是否设置、销毁属性
方法的重载通过__call
来实现,当调用不存在的方法的时候,将会转为参数调用__call
方法,当调用不存在的静态方法时会使用__callStatic
重载。
1 |
|
其他特性
对象复制,在一些特殊情况下,可以通过关键字clone来复制一个对象,这时__clone
方法会被调用,通过这个魔术方法来设置属性的值。
1 | // 不需要返回值 |
对象序列化,可以通过serialize方法将对象序列化为字符串,用于存储或者传递数据,然后在需要的时候通过unserialize将字符串反序列化成对象进行使用。
字符串
除了常规的定义方法,PHP中还可以这样定义:heredoc语法结构定义的字符串:
1 | $hello = <<<TAG |
为什么感觉似曾相识,想不起是那种语言了,罢了
关于定义字符串单引号和双引号的区别:PHP允许我们在双引号串中直接包含字串变量。而单引号串中的内容总被认为是普通字符。
去除字符串的空格:
trim去除一个字符串两端空格。
rtrim是去除一个字符串右部空格,其中的r是right的缩写。
ltrim是去除一个字符串左部空格,其中的l是left的缩写。
计算长度与替换:
strlen() 最好用来计算英文字串的长度
mb_strlen() 可以用来计算中文,同时可以传入一个编码格式的参数
替换:str_replace(要查找的字符串, 要替换的字符串, 被搜索的字符串, 替换进行计数[可选])
字符串截取与查找:
英文:substr(字符串变量,开始截取的位置,截取个数)
中文:mb_substr(字符串变量,开始截取的位置,截取个数, 网页编码)
查找:strpos(要处理的字符串, 要定位的字符串, 定位的起始位置[可选])
返回的是索引,从0开始
格式化字串,没有数据类型就是好:
sprintf(格式, 要转化的字符串)
sprintf(‘%01.2f’,$str)
%06.2f—->整个字串至少需要6个字符占位,如果不足就用0填充,小数点后保留2位
合并与分割、转义:
合并:implode(分隔符[可选], 数组)
分割,返回数组:explode(分隔符[可选], 字符串)
转义:addslashes() 返回一个转义后的字符串,如’i’m’–>’i\’m’
正则
PHP中使用PCRE库函数进行正则匹配,preg_match(path,str)
用于执行一个正则匹配,常用来判断一类字符模式是否存在。标识一个字串是正则可以用分隔符斜线:'/表达式/'
;分隔符可以是非数字、非反斜线、非空格的任意字符。经常使用的分隔符是正斜线(/)、hash符号(#) 以及取反符号(~)
分隔符后面可以使用模式修饰符,模式修饰符包括:i, m, s, x等,例如使用i修饰符可以忽略大小写匹配:'//i'
可以传入三个参数:preg_match($pattern, $subject, $matches);
,匹配结果会写入到matches中,以数组的方式,第一个一般是完整的匹配,第二个就是第一个子组的所有匹配到的不确定字符 (: 大雾\-
==>_
嗯…..
上面的方法只能匹配一次,想要匹配多次可以使用preg_match_all方法,用法一样
1 | $string = 'April 15, 2014'; |
其中${1}与$1的写法是等效的,表示第一个匹配的字串,$2代表第二个匹配的。分组技术~~~
评论框加载失败,无法访问 Disqus
你可能需要魔法上网~~