php学习笔记

常用函数

var_dump() 函数返回数组的数据类型和值

unset() 释放

bool define(string $constant_name, mixed $value[, $case_sensitive = true]) 定义常量

mixed constant(string constant_name) 调用常数--第一个参数constant_name为要获取常量的名称,也可为存储常量名的变量。如果成功则返回常量的值,失败则提示错误信息常量没有被定义。(注:mixed表示函数返回值类型为多种不同的类型,string表示参数类型为字符串类型)

bool defined(string constants_name)判断一个常量是否已经定义,它只有参数constant_name,指的是要获取常量的名称,若存在则返回布尔类型true,否则返回布尔类型false; (注:bool表示函数返回值类型为布尔类型)

魔术方法

__set,__get,__isset,__unset,__call,__clone

字符串

trim去除一个字符串两端空格。trim($str);

rtrim是去除一个字符串右部空格,其中的r是right的缩写。

ltrim是去除一个字符串左部空格,其中的l是left的缩写。

strlen()函数获取字符串长度。strlen($str);

mb_strlen()函数获取字符串中中文长度。mb_strlen($str,"UTF8")

substr(字符串变量,开始截取的位置,截取个数)substr($str, 2, 4);

mb_substr(字符串变量,开始截取的位置,截取个数, 网页编码)中文   mb_substr($str, 4, 2, 'utf8');

strpos(要处理的字符串, 要定位的字符串, 定位的起始位置[可选]) strpos($str, 'imooc');

str_replace(要查找的字符串, 要替换的字符串, 被搜索的字符串, 替换进行计数[可选])str_replace('js', 'php', $str);

sprintf(格式, 要转化的字符串)返回:格式化好的字符串 sprintf('%01.2f', $str)

1、这个 % 符号是开始的意思,写在最前面表示指定格式开始了。 也就是 "起始字符", 直到出现 "转换字符" 为止,就算格式终止。

2、跟在 % 符号后面的是 0, 是 "填空字元" ,表示如果位置空着就用0来填满。

3、在 0 后面的是1,这个 1 是规定整个所有的字符串占位要有1位以上(小数点也算一个占位)。

如果把 1 改成 6,则 $result的值将为 099.90

因为,在小数点后面必须是两位,99.90一共5个占位,现在需要6个占位,所以用0来填满。

4、在 %01 后面的 .2 (点2) 就很好理解了,它的意思是,小数点后的数字必须占2位。 如果这时候,$str 的值为9.234,则 $result的值将为9.23.

为什么4 不见了呢? 因为在小数点后面,按照上面的规定,必须且仅能占2位。 可是 $str 的值中,小数点后面占了3位,所以,尾数4被去掉了,只剩下 23。

5、最后,以 f "转换字符" 结尾。

implode(分隔符[可选], 数组)返回值:把数组元素组合为一个字符串 explode(',', $str);

explode(分隔符[可选], 字符串)返回值:函数返回由字符串组成的数组 explode('-',$str);

addslashes()函数说明:用于对特殊字符加上转义字符,返回一个字符串。返回值:一个经过转义后的字符串

// 1. addslashes此函数在DBMS没有自己的转义函数时候使用

// 2. htmlspecialchars把HTML中的几个特殊字符转义成HTML Entity形式

// 3. htmlentities把HTML中可以转义的内容转义成HTML Entity

// 4. mysql_real_escape_string调用MySQL的库函数对特殊字符进行转义

// 5. strip_tags滤掉NUL,HTML和PHP的标签

preg_match用于执行一个正则匹配,常用来判断一类字符模式是否存在。preg_match($r, $str);return bool  preg_match($p, $str, $match);

file_get_contents,可以将整个文件全部读取到一个字符串中。file_get_contents('./test.txt');

fopen,fgets,fread等方法,fgets可以从文件指针中读取一行,freads可以读取指定长度的字符串。

一般情况下在对文件进行操作的时候需要先判断文件是否存在,PHP中常用来判断文件存在的函数有两个is_file与file_exists.

如果只是判断文件存在,使用file_exists就行,file_exists不仅可以判断文件是否存在,同时也可以判断目录是否存在,从函数名可以看出,is_file是确切的判断给定的路径是否是一个文件。

is_readable与is_writeable在文件是否存在的基础上,判断文件是否可读与可写。



系统常量

(1)__FILE__ :php程序文件名。它可以帮助我们获取当前文件在服务器的物理位置。

(2)__LINE__ :PHP程序文件行数。它可以告诉我们,当前代码在第几行。

(3)PHP_VERSION:当前解析器的版本号。它可以告诉我们当前PHP解析器的版本号,我们可以提前知道我们的PHP代码是否可被该PHP解析器解析。

(4)PHP_OS:执行当前PHP版本的操作系统名称。它可以告诉我们服务器所用的操作系统名称,我们可以根据该操作系统优化我们的代码。


巴拉

Heredoc结构形式

首先使用定界符表示字符串(<<<),接着在“<<<“之后提供一个标识符GOD,然后是字符串,最后以提供的这个标识符结束字符串。如图:

php学习笔记_第1张图片

在赋值符号后,输入定界符“<<<”,接着是标识符,你可以用你的女神作为标识符“GOD”,如第2行,也可以使用你喜欢的狗狗,“DOG”作为标识符,但是,结尾处的标识符也必须是一样的。此外,在结尾的一行,如第7行,一定要另起一行,并且此行除了“GOD”,并以“;”号结束之外,不能有任何其他字符,前后都不能有,包括空格,否则会出现错误的哦。切记切记哦。


PHP赋值运算符

PHP的赋值运算符有两种,分别是:

(1)“=”:把右边表达式的值赋给左边的运算数。它将右边表达式值复制一份,交给左边的运算数。换而言之,首先给左边的运算数申请了一块内存,然后把复制的值放到这个内存中。

(2)“&”:引用赋值,意味着两个变量都指向同一个数据。它将使两个变量共享一块内存,如果这个内存存储的数据变了,那么两个变量的值都会发生变化。

比较运算符

比较运算符主要是用于进行比较运算的,例如:等于、全等、不等、大于、小于。在PHP中常用的比较运算符如下表:

php学习笔记_第2张图片
对象比较,当同一个类的两个实例的所有属性都相等时,可以使用比较运算符==进行判断,当需要判断两个变量是否为同一个对象的引用时,可以使用全等运算符===进行判断。

三元运算符

(“?:”)三元运算符也是一个比较运算符,对于表达式(expr1)?(expr2):(expr3),如果expr1的值为true,则此表达式的值为expr2,否则为expr3。

逻辑运算符

逻辑运算符主用是进行逻辑运算的,例如:逻辑与、逻辑或、逻辑异或、逻辑非等,在PHP中常用的逻辑运算符如下表:

php学习笔记_第3张图片

PHP中的字符串连接运算符

字符串连接运算符是为了将两个字符串进行连接,PHP中提供的字符串连接运算符有:

(1)连接运算符(“.”):它返回将右参数附加到左参数后面所得的字符串。

(2)连接赋值运算符(“.=”):它将右边参数附加到左边的参数后。

PHP中的错误控制运算符

PHP中提供了一个错误控制运算符“@”,对于一些可能会在运行过程中出错的表达式时,我们不希望出错的时候给客户显示错误信息,这样对用户不友好。于是,可以将@放置在一个PHP表达式之前,该表达式可能产生的任何错误信息都被忽略掉;

如果激活了track_error(这个玩意在php.ini中设置)特性,表达式所产生的任何错误信息都被存放在变量$php_errormsg中,此变量在每次出错时都会被覆盖,所以如果想用它的话必须尽早检查。

需要注意的是:错误控制前缀“@”不会屏蔽解析错误的信息,不能把它放在函数或类的定义之前,也不能用于条件结构例如if和foreach等。

foreach

在PHP中foreach循环语句,常用于遍历数组,一般有两种使用方式:不取下标、取下标。

(1)只取值,不取下标

foreach (数组 as 值){

//执行的任务

}

(2)同时取下标和值

foreach (数组 as 下标 => 值){

//执行的任务

}

数组

$arr[0]="";

$arr= array();

$arr=array("key"=>"value");

PHP函数之可变函数

所谓可变函数,即通过变量的值来调用函数,因为变量的值是可变的,所以可以通过改变一个变量的值来实现调用不同的函数。经常会用在回调函数、函数列表,或者根据动态参数来调用不同的函数。可变函数的调用方法为变量名加括号。

function name() {

echo 'jobs';

}

$func = 'name';

$func(); //调用可变函数

可变函数也可以用在对象的方法调用上。

class book {

function getName() {

return 'bookname';

}

}

$func = 'getName';

$book = new book();

$book->$func();

类属性

一般通过->对象操作符来访问对象的属性或者方法,对于静态属性则使用::双冒号进行访问。当在类成员方法内部调用的时候,可以使用$this伪变量调用当前对象的属性。

静态

静态方法中,$this伪变量不允许使用。可以使用self,parent,static在内部调用静态方法与属性。

对象序列化

可以通过serialize方法将对象序列化为字符串,用于存储或者传递数据,然后在需要的时候通过unserialize将字符串反序列化成对象进行使用。

class Car {

public $name = 'car';

}

$a = new Car();

$str = serialize($a); //对象序列化成字符串

echo $str.'
';

$b = unserialize($str); //反序列化为对象

var_dump($b);

正则表达式

PCRE库函数中,正则匹配模式使用分隔符与元字符组成,分隔符可以是非数字、非反斜线、非空格的任意字符。经常使用的分隔符是正斜线(/)、hash符号(#) 以及取反符号(~),例如:

/foo bar/

#^[^0-9]$#

~php~

如果模式中包含分隔符,则分隔符需要使用反斜杠(\)进行转义。

/http:\/\//

如果模式中包含较多的分割字符,建议更换其他的字符作为分隔符,也可以采用preg_quote进行转义。

$p = 'http://';

$p = '/'.preg_quote($p, '/').'/';

echo $p;

分隔符后面可以使用模式修饰符,模式修饰符包括:i, m, s, x等,例如使用i修饰符可以忽略大小写匹配:

$str = "Http://www.imooc.com/";

if (preg_match('/http/i', $str)) {

echo '匹配成功';

}

元字符与转义

正则表达式中具有特殊含义的字符称之为元字符,常用的元字符有:

\ 一般用于转义字符

^ 断言目标的开始位置(或在多行模式下是行首)

$ 断言目标的结束位置(或在多行模式下是行尾)

. 匹配除换行符外的任何字符(默认)

[ 开始字符类定义

] 结束字符类定义

| 开始一个可选分支

( 子组的开始标记

) 子组的结束标记

? 作为量词,表示 0 次或 1 次匹配。位于量词后面用于改变量词的贪婪特性。 (查阅量词)

* 量词,0 次或多次匹配

+ 量词,1 次或多次匹配

{ 自定义量词开始标记

} 自定义量词结束标记

//下面的\s匹配任意的空白符,包括空格,制表符,换行符。[^\s]代表非空白符。[^\s]+表示一次或多次匹配非空白符。

$p = '/^我[^\s]+(苹果|香蕉)$/';

$str = "我喜欢吃苹果";

if (preg_match($p, $str)) {

echo '匹配成功';

}

元字符具有两种使用场景,一种是可以在任何地方都能使用,另一种是只能在方括号内使用,在方括号内使用的有:

\ 转义字符

^ 仅在作为第一个字符(方括号内)时,表明字符类取反

- 标记字符范围

其中^在反括号外面,表示断言目标的开始位置,但在方括号内部则代表字符类取反,方括号内的减号-可以标记字符范围,例如0-9表示0到9之间的所有数字。

//下面的\w匹配字母或数字或下划线。

$p = '/[\w\.\-]+@[a-z0-9\-]+\.(com|cn)/';

$str = "我的邮箱是[email protected]";

preg_match($p, $str, $match);

echo $match[0];

\d表示匹配数字

关于match数组的说明:

文档上的解释为:如果提供了参数 matches ,它将被填充为搜索结果。 $matches[0] 将包含完整模式匹配到的文本, $matches[1] 将包含第一个捕获子组匹配到的文本,以此类推。

文档上对于子组的说明为:子组通过圆括号分隔界定,并且它们可以嵌套。

正则表达式的搜索与替换在某些方面具有重要用途,比如调整目标字符串的格式,改变目标字符串中匹配字符串的顺序等。

例如我们可以简单的调整字符串的日期格式:

$string = 'April 15, 2014';

$pattern = '/(\w+) (\d+), (\d+)/i';

$replacement = '$3, ${1} $2';

echo preg_replace($pattern, $replacement, $string); //结果为:2014, April 15

其中${1}与$1的写法是等效的,表示第一个匹配的字串,$2代表第二个匹配的。

通过复杂的模式,我们可以更加精确的替换目标字符串的内容。

$patterns = array ('/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/',

'/^\s*{(\w+)}\s*=/');

$replace = array ('\3/\4/\1\2', '$\1 =');//\3等效于$3,\4等效于$4,依次类推

echo preg_replace($patterns, $replace, '{startDate} = 1999-5-27'); //结果为:$startDate = 5/27/1999

//详细解释下结果:(19|20)表示取19或者20中任意一个数字,(\d{2})表示两个数字,(\d{1,2})表示1个或2个数字,(\d{1,2})表示1个或2个数字。^\s*{(\w+)\s*=}表示以任意空格开头的,并且包含在{}中的字符,并且以任意空格结尾的,最后有个=号的。

用正则替换来去掉多余的空格与字符:

$str = 'one    two';

$str = preg_replace('/\s+/', ' ', $str);

echo $str; // 结果改变为'one two'

GD

要对图形进行操作,首先要新建一个画布,通过imagecreatetruecolor函数可以创建一个真彩色的空白图片:

$img = imagecreatetruecolor(100, 100);

GD库中对于画笔所用的颜色,需要通过imagecolorallocate函数进行分配,通过参数设定RGB的颜色值来确定画笔的颜色:

$red = imagecolorallocate($img, 0xFF, 0x00, 0x00);

然后我们通过调用绘制线段函数imageline进行线条的绘制,通过指定起点跟终点来最终得到线条。

imageline($img, 0, 0, 100, 100, $red);

线条绘制好以后,通过header与imagepng进行图像的输出。

header("content-type: image/png");

imagepng($img);

最后可以调用imagedestroy释放该图片占用的内存。

imagedestroy($img);

通过上面的步骤,可以发现PHP绘制图形非常的简单,但很多时候我们不只是需要输出图片,可能我们还需要得到一个图片文件,可以通过imagepng函数指定文件名将绘制后的图像保存到文件中。

imagepng($img, 'img.png');

GD库可以进行多种图形的基本操作,常用的有绘制线条,背景填充,画矩形,绘制文字等。

跟绘制线条类似,首先需要新建一个图片与初始化颜色。

$img = imagecreatetruecolor(100, 100);

$red = imagecolorallocate($img, 0xFF, 0x00, 0x00);

然后使用imagestring函数来进行文字的绘制,这个函数的参数很多:imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col ),可以通过$font来设置字体的大小,x,y设置文字显示的位置,$s是要绘制的文字,$col是文字的颜色。

imagestring($img, 5, 0, 0, "Hello world", $red);

header("content-type: image/png");

imagepng($img);

imagedestroy($img);

前面我们已经了解到,通过imagepng可以直接输出图像到浏览器,但是很多时候,我们希望将处理好的图像保存到文件,以便可以多次使用。通过指定路径参数将图像保存到文件中。

$filename = 'img.png';

imagepng($img, $filename);

使用imagepng可以将图像保存成png格式,如果要保存成其他格式需要使用不同的函数,使用imagejpeg将图片保存成jpeg格式,imagegif将图片保存成gif格式,需要说明的是,imagejpeg会对图片进行压缩,因此还可以设置一个质量参数。

$filename = 'img.jpg';

​imagejpeg($img, $filename, 80);

imagecreatefromjpeg可以直接从图片文件创建图像。

异常

1、基本语法

try{

//可能出现错误或异常的代码

//catch表示捕获,Exception是php已定义好的异常类

} catch(Exception $e){

//对异常处理,方法:

//1、自己处理

//2、不处理,将其再次抛出

}

2、处理处理程序应当包括:

Try - 使用异常的函数应该位于 "try"  代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。

Throw - 这里规定如何触发异常。注意:每一个 "throw" 必须对应至少一个 "catch",当然可以对应多个"catch"

Catch - "catch" 代码块会捕获异常,并创建一个包含异常信息的对象。

//创建可抛出一个异常的函数

function checkNum($number){

if($number>1){

throw new Exception("异常提示-数字必须小于等于1");

}

return true;

}

//在 "try" 代码块中触发异常

try{

checkNum(2);

//如果异常被抛出,那么下面一行代码将不会被输出

echo '如果能看到这个提示,说明你的数字小于等于1';

}catch(Exception $e){

//捕获异常

echo '捕获异常: ' .$e->getMessage();

}

上面代码将获得类似这样一个错误:

捕获异常:: 异常提示-数字必须小于等于1

例子解释:

上面的代码抛出了一个异常,并捕获了它:

创建 checkNum() 函数。它检测数字是否大于 1。如果是,则抛出一个异常。

在 "try" 代码块中调用 checkNum() 函数。

checkNum() 函数中的异常被抛出

"catch" 代码块接收到该异常,并创建一个包含异常信息的对象 ($e)。

通过从这个 exception 对象调用 $e->getMessage(),输出来自该异常的错误消息

你可能感兴趣的:(php学习笔记)