目录
1、PHP语法结构
#标准风格
<?php
echo "hello php";
?>
#短风格,需要修改php.ini中的 hort_open_tag = On 选项,重启服务器生效
<?
echo "hello php";
?>
#ASP风格,需要修改php.ini中的asp_tags = On 选项,重启服务器生效
<%
echo "hello php";
%>
#长风格
<script language='php'>
echo "hello php";
</script>
2、PHP注释
<?php
#单行注释 shell风格
//单行注释 C++风格
/*
多行注释 C风格
*/
?>
3、PHP变量
<?php
#变量的声明及赋值
$user_name = "小明";
$a=$b=$c=12; #一次声明多个变量,并且赋值相同值
?>
4、变量的特性
<?php
#PHP可变变量
$a = "b";
$b = "c";
$c = "d";
echo $$$a; #输出"d" $$a = #b = "c" $$$a = $c = "d" 等量交换
#变量的赋值,不同变量分别开辟不同内存空间,互不影响
$a=1;
$b=$a;
$a=2;
echo $a,$b #分别输出2和1
#&符号为取地址符,表示该变量指向其他变量的内存地址,2个变量共享一个内存空间,其中一个变量修改了值会影响另一个变量值
$a=1;
$b=&$a;
$a=2;
echo $a,$b #分别输出2和2
?>
5、数据类型
<?php
#PHP数据类型分为8种主要数据类型,3种伪类型:
#标量类型:
#1、整形(包括:十进制、八进制、二进制)
$int = 1;
$int = -1;
$int = 0x123;
var_dump($int); #var_dump()函数打印变量的详细信息 输出 int(291)
#2、浮点型
$float = 1.2;
var_dump($float); #float(1.2)
$float = 2e3; #float(2000)
var_dump($float);
#3、布尔型(True和False)
$bool = True;
var_dump($bool); #bool(true)
$bool = False;
var_dump($bool); #bool(false)
#4、字符串(单引号、双引号、HereDoc、NowDoc)
$string = "hello";
var_dump($string); #string(5) "hello" 在UTF-8中,一个中文占3个长度
$string = 'hello';
var_dump($string); #string(5) "hello"
#复合数据类型
#5、数组
$array = array();
var_dump($array); #array(0) { }
#6、对象
$object = new stdClass();
var_dump($object); #object(stdClass)#1 (0) { }
#特殊类型
#7、资源
$handle = fopen('index.php','r');
var_dump($handle); #resource(3) of type (stream)
#8、空(未声明变量的值为NULL,声明变量并且赋值为NULL,用unset()函数注销过的变量)
$a = NULL;
$b = 1;
unset($b);
#伪类型
#1、数值型(number)
#2、混合类型(mixed)
#3、回调函数(callback)
?>
6、字符串的特性
<?php
#单引号和双引号的区别:
#1、双引号解析变量、单引号不解析变量
$name="hello php";
echo $name; #hello php
echo "$name"; #hello php
echo '$name'; #$name
#2、因为单引号不解析变量,故单引号执行效率高
#3、双引号会解析所有转义字符,单引号只能解析\\和\'两个转义字符
$string = "hello \n\t\'\" php";
echo $string; #hello \'" php
$string = 'hello \n\t\'\" php';
echo $string; #hello \n\t'\" php
#4、双引号包含单引号会解析变量,单引号包含双引号不解析变量
$str='hello';
echo "'$str'"; # 'hello'
echo '"$str"'; # "$str"
#5、使用花括号{}进行变量与字符串的连接
$str='hello';
echo "{$str}s"; # hellos
echo "${str}s"; # hellos
#6、使用花括号对字符串中的值进行增删改查
$str='hello';
echo $str{2}.'<hr>'; #查找字符 输出l
$str{2}='f'; #修改字符,只能替换一个字符,如果赋值多个字符,则会取第一个字符
echo $str.'<hr>'; # heflo
$str{9}='f'; #增加字符,没有对应的字符会用空格进行填充
echo $str.'<hr>'; #heflo f
$str{0}=''; #删除字符
echo $str.'<hr>'; #eflo f
?>
7、大文本字符串
<?php
#大文本适合php代码和hmtl、js代码混合使用的时候,不用考虑字符串单双引号的烦恼。
$name = 'hello php';
$str = <<<EOD
hello {$name}
EOD;
echo $str; #hello hello php
?>
8、数据类型转换-隐式转换(自动转换)
<?php
#一、其他类型转换为数值型:
#1、布尔类型转换成数值型 True转为1,False转换为0
echo True #1
echo 1+False #1
#2、null空类型转换数值型为0
echo 1+NULL; #1
#3、字符串类型转换为数值型,如果不是以数字开头的字符串,转换为0,如果是以数字开始的字符串,截取到非法数字结束为止
echo 1+'a'; #1
echo 1+'1'; #2
echo 1+'2a'; #3
echo 1+'2a11'; #3
echo 1+'2.1abc'; #3.1
echo 1+'2e2'; #201
#二、其他类型转换成字符串型
#1、数值类型转换为字符串类型为数值本身
echo 123; #123
#2、布尔类型转换成字符串型,True为'1',False为空字符串
echo True; #1
echo Fasle; #空字符串
#3、NULL转换成字符串型为空字符串
echo NULL; #空字符串
#三、其他类型转换为布尔型,只需记住为假的即可,其他的都为真:
#空字符串''和""、字符串'0'/"0"
#0
#0.0
#null
#空数组
?>
9、数据类型转换-强制转换(显示转换)
<?php
#临时转换,格式(数据类型)变量/值:
#(int)、(float)、(double)、(bool)、(string)、(unset)、(array)、(object)
var_dump((int)'123'); #int(123)
var_dump((float)20); #float(20)
var_dump((string)123); #string(3) "123"
var_dump((bool)1); #bool(true)
#临时转换,通过函数进行转换:intval()、floatval()、strval()、boolval()
var_dump(intval('123')); #int(123)
var_dump(floatval(123)); #float(123)
var_dump(strval(123)); #string(3) "123"
var_dump(boolval('1')); #需要使用php5.5.0以上
#永久转换,设置变量类型:settype($var,$type),获取变量类型gettype($val)
$var =123;
echo settype($var,int); #1
var_dump($var); #int(123)
echo settype($var,float); #1
var_dump($var); #float(123)
echo settype($var,bool); #1
var_dump($var); #bool(true)
#检测变量类型: is_数据类型($var)
$var =123;
var_dump(is_int($var)); #bool(true)
var_dump(is_float($var));
var_dump(is_string($var));
var_dump(is_bool($var));
var_dump(is_double($var));
var_dump(is_array($var));
var_dump(is_object($var));
var_dump(is_null($var));
var_dump(is_numeric($var));
?>
10、系统常量、自定义常量和魔术常量
<?php
#一、系统常量,PHP内置好的常量,直接调用即可
echo PHP_VERSION; #PHP版本 5.4.45
echo PHP_OS; #操作系统类型 WINNT
echo M_PI; #3.1415926535898
#二、自定义常量 define($name,$value,[是否不区分大小写])
define('PI','3.1415'); #常量名最好全部大写
define('MY_AGE',20);
echo PI; #3.1415
echo MY_AGE; #20
echo my_age; #Notice: Use of undefined constant my_age
define('AGE',22,True); #设置为True,不区分
echo AGE; #22
echo age; #22
#通过constant()函数获取常量值
echo constant('AGE'); #22
#通过defined()函数检测常量是否被定义
var_dump(defined('AGE')); #bool(true)
var_dump(defined('my')); #bool(false)
#结合以上进行常量判断定义与取值
$name='NAME';
$value='zhangshan';
if(!defined($name)){
echo "常量未被定义";
define($name,$value);
echo $name; #输出NAME
echo constant($name); #输出zhangsan,所以这里要用constant()函数进行获取常量值
}else {
echo constant($name);
}
#在PHP5.3后可以使用const进行定义常量 const 常量名=值
const ROOT='root';
echo ROOT; #root
echo constant('ROOT'); #root
#通过get_defined_constants()函数得到已定义的所有常量
print_r(get_defined_constants());
/*
Array
(
[E_ERROR] => 1
[E_RECOVERABLE_ERROR] => 4096
[E_WARNING] => 2
[E_PARSE] => 4
[E_NOTICE] => 8
[E_STRICT] => 2048
........
*/
#三、PHP魔术常量
echo __LINE__; #文件中当前的行号 3
echo __FILE__; #文件的绝对路径和文件名 D:\phpStudy\PHPTutorial\WWW\BJ\index.php
echo __DIR__; #返回文件所在目录 D:\phpStudy\PHPTutorial\WWW\BJ
__FUNCTION__; #返回函数名称
__CLASS__; #返回类名称
__NAMESPACE__; #返回当前命名空间的名称
#等等其他
?>
11、运算符
算数运算符
<?php
echo 1+1; #2
echo 3-2; #1
echo 2*2; #4
echo 4/2; #2
echo 5%2; #1
#自增运算
$int1 = 2;
echo $int1++; #2 先执行,再加1
echo $int1; #3
$int1 = 2;
echo ++$int1; #3 先加1,在执行
echo $int1; #3
#自减运算
$int1 = 2;
echo $int1--; #2
echo $int1; #1
$int1 = 2;
echo --$int1; #1
echo $int1; #1
?>
字符连接符
<?php
#通过.符号连接2个字符串或字符串变量
echo 'hello'.'world'; #helloworld
echo 'hello','world'; #helloworld
$name='php';
echo '<hr>';
echo 'hello'.$name; #hellophp
echo '<hr>';
echo 'helo',$name; #hellophp
?>
赋值运算符
<?php
#赋值运算符包括 =、+=、-=、*=、/=、%=、.=
$a=1;
echo $a+=1; #2 $a=$a+1 1+1=2
echo $a-=1; #1 $a=$a-1 2-1=1
echo $a*=1; #1 $a=$a*1 1*1=1
echo $a/=1; #1 $a=$a/1 1/1=1
#.=的运用,输出2行表格
$table='<table border="1">';
$table.='<tr>';
$table.='<td>a</td>';
$table.='<td>a</td>';
$table.='</tr>';
$table.='</table>';
echo $table;
?>
比较运算符
<?php
#比较运算符包括 >、>=、<、<=、==、!=、<>、===、!==
var_dump(2>1); #bool(true)
var_dump(2<1); #bool(false)
# ==与===区别:==只比较值是否相同,===(全等于)值和类型都要相同
var_dump(1==1,1=='1',1==True); # bool(true) bool(true) bool(true)
var_dump(1===1,1==='1',1===True); #bool(true) bool(false) bool(false)
?>
逻辑运算符
<?php
#逻辑运算符包括 逻辑与(and或&&)、逻辑或(or或||)、逻辑非(!)、逻辑异或(xor)
#逻辑与 and && 全部为真,返回真 短路的现象:第一个表达式为假,则返回假,不运算其他表达式
var_dump(True and True); #bool(true)
var_dump(True && False); #bool(false)
#逻辑或 or || 只要有一个为真,返回真 短路现象:第一个表达式为真,则返回真,不运算其他表达式
var_dump(True or True); #bool(true)
var_dump(True || False); #bool(true)
#逻辑非 取反
var_dump(!True); #bool(false)
#逻辑异或 xor 两个表达式同为True或者False,返回False
var_dump(True xor False); #bool(true)
var_dump(True xor True); #bool(false)
?>
执行运算符
<?php
#执行运算符 ``反引号作为shell命令来执行,与shell_exec()作用相同
print_r(`cd`); #D:\phpStudy\PHPTutorial\WWW\BJ
print_r(shell_exec('cd')); #D:\phpStudy\PHPTutorial\WWW\BJ
?>
错误抑制符
<?php
#错误抑制符@,加到错误表达式之前
echo 4/0; #Warning: Division by zero in
echo @(4/0); #不会显示警告信息
?>
三元运算符
<?php
#三元运算符 exp1?exp2:exp3 exp1为真,返回exp2,否则返回exp3
$a=3>2?'True':'False';
echo $a; #True
#等同于
if(3>2){
echo 'True';
}else {
echo 'False';
}
#三元运算符 exp1?:exp2 exp1为真,返回exp1,否则返回exp2
$a=3>2?:'False';
var_dump($a); #bool(true)
?>