PHP变量
一、变量的命名规则:
变量名由字母或者下划线开头,后面跟上任意数量的字母、数字或者下划线。
- 变量的开头一定要有$;
- 变量中不能有特殊运算符;
- 变量中不能一数字开头;
- 禁止使用系统关键字作为变量名称;
- 变量名一定要有意义;
- 变量名区分大小写,但内置结构和关键字以及用户自定义的类名和函数名都是不区分大小写的;
二、在程序中使用空白行的处理:
1、使用两个空行:
- 一个源文件的两个代码片段之间;
- 两个类的声明之间;
2、使用一个空行:
- 两个函数声明之间;
- 函数内的局部变量和函数的第一条语句之间;
- 块注释或单行注释之前;
- 一个函数内的两个逻辑代码段之间;
3、代码缩进:
- 代码必须使用4个空格来进行缩进,禁止使用TAB键
- 如果软件中TAB缩进不是四个空格,需要设置为四个空格
三、变量的类型(8种):
一、四种标量类型:
- 整型(integer)
- 浮点型(float double)
- 字符串(string)
- 布尔型(boolean)
注意:字符串可以用三种字面上的方法定义:
- 单引号 '';
- 双引号"";
- 定界符<<<;
二、两种复合类型:
- 数组(array)
- 对象(object)
三、两种特殊类型:
- 资源(resource)
- NULL
四、伪类型:
伪类型并不是PHP语言中的基本数据类型,只是因为PHP是弱类型语言,所以在一些函数中,一个参数可以接收多种类型的数据,还可以接收别的函数作为回调函数使用。为了确保代码的易读性在本书中介绍一些伪类型的使用。(例子:瓶子与酒瓶的区别。酒瓶里只能装酒,而瓶子里可以装酒、醋、酱油、水等。弱类型的就是瓶子,可以接受多种类型的数据)
mixed:说明一个参数可以接受多种不同的(但并不必须是所有的)类型;
number:说明一个参数可以是 integer 或者 float。
callback:有些诸如 call_user_function() 或 usort() 的函数接受用户自定义的函数作为一个参数。
callback函数不仅可以是一个简单的函数,它还可以是一个对象的方法,包括静态类的方法。
一个PHP函数用函数名 ,字符串来传递。可以传递任何内置的或者用户自定义的函数,除了array(), echo(),
empty(), eval(), exit(), isset(), list(), print() 和 unset(0.
四、单双引号的区别:
- 单双引号可以互插
- 单引号的的效率更高
- 单引号不能解析变量,双引号可以
- 单引号可以解析 “单引号 、\”,双引号可以解析更多的转义字符
- 双引号中可以插入单引号,单引号中的变量会被解析,同时保留单引号
- 拼接一个变量和字符串,或两个变量之间用“.”
<?php
$a = 'abc';
$b = "xyz";
// 1,单引号内的变量不能被解析,双引号内的变量可以被解析
$c = '$a';
$c = "$a";
var_dump($c);
// 2,单引号内可以插入双引号,双引号内可以插入单引号
/*echo $d = 'nihao "zhongguo"';
echo $e = "nihao 'taiwan'";
*/
//3,单引号可以解析 单引号,\ ,双音号可以解析更多的转义字符
echo $f = 'ni\\h\n \$ao \'hanguo\'';
echo $h = "ni\nhao \"jiangsu\" \$";
//4,单引号的效率更高
//5,拼接两个变量,或者拼接变量和字符串使用 "."
echo '<br>';
$a = 'wo ai ni zhongguo,';
$b = 'wo ai ni beijing';
echo '我说:'.$a.$b.'zheng doushi zhende?';
$color = 'red';
$border = '10';
//6单引号内插入双引号,双引号内的变量不会被解析
echo '<table border="'.$border.'" bgcolor="'.$color.'"><tr><td>内容</td></tr></table>';
$border = 2;
$color = 'pink';
//7双引号内插入单引号,单引号内的变量会被解析,同时保留单引号
echo "<table border='$border' bgcolor='$color'><tr><td>内容</td></tr></table>";
// 用途2: 不需要记下 了解即可:$username = 'jack';
// $sql = "select * from bbs_user where user='$username'";
$a = 'abc';
$b = "xyz";
// 1,单引号内的变量不能被解析,双引号内的变量可以被解析
$c = '$a';
$c = "$a";
var_dump($c);
// 2,单引号内可以插入双引号,双引号内可以插入单引号
/*echo $d = 'nihao "zhongguo"';
echo $e = "nihao 'taiwan'";
*/
//3,单引号可以解析 单引号,\ ,双音号可以解析更多的转义字符
echo $f = 'ni\\h\n \$ao \'hanguo\'';
echo $h = "ni\nhao \"jiangsu\" \$";
//4,单引号的效率更高
//5,拼接两个变量,或者拼接变量和字符串使用 "."
echo '<br>';
$a = 'wo ai ni zhongguo,';
$b = 'wo ai ni beijing';
echo '我说:'.$a.$b.'zheng doushi zhende?';
$color = 'red';
$border = '10';
//6单引号内插入双引号,双引号内的变量不会被解析
echo '<table border="'.$border.'" bgcolor="'.$color.'"><tr><td>内容</td></tr></table>';
$border = 2;
$color = 'pink';
//7双引号内插入单引号,单引号内的变量会被解析,同时保留单引号
echo "<table border='$border' bgcolor='$color'><tr><td>内容</td></tr></table>";
// 用途2: 不需要记下 了解即可:$username = 'jack';
// $sql = "select * from bbs_user where user='$username'";
五、PHP中那些变量转换成布尔型时为false的有:
- 整型0
- 浮点0
- 空字符串字符串0
- 空数组
- 空对象、空资源
- false本身
- 被销毁的变量unset() ,和未定义的变量
- NULL
- 被赋值为NULL值的变量;
- 尚未被赋值的变量;
- 被unset()函数销毁的变量
口诀:四大皆空,三零
<?php
header("content-type:text/html;charset=utf-8");
//布尔值参与算术运算时 true 转为1 false 0
$boo = true;
$boo = false;
var_dump($boo + 10);
//下列情况为false
//1、整型0
$num = 0;
$num = -0;
//2、浮点型
$num = 0.0;
$num = 1.1;
//3、字符串
$num = 'a';
$num = 'abc';
$num = '0.0';
$num = 'false';
$num = '0';
//4、空字符串
$num = '';
//5、空数组、空对象
$num = array();
$num = array(0);
//6、null、空资源
$num = null;
//7、false本身
//8、被销毁的变量unset();
if($num){
echo'真';
}else{
echo'假';
}
unset($num);
var_dump($num);
header("content-type:text/html;charset=utf-8");
//布尔值参与算术运算时 true 转为1 false 0
$boo = true;
$boo = false;
var_dump($boo + 10);
//下列情况为false
//1、整型0
$num = 0;
$num = -0;
//2、浮点型
$num = 0.0;
$num = 1.1;
//3、字符串
$num = 'a';
$num = 'abc';
$num = '0.0';
$num = 'false';
$num = '0';
//4、空字符串
$num = '';
//5、空数组、空对象
$num = array();
$num = array(0);
//6、null、空资源
$num = null;
//7、false本身
//8、被销毁的变量unset();
if($num){
echo'真';
}else{
echo'假';
}
unset($num);
var_dump($num);
六、参与算术运算时,各种类型结果:
<?php
//如果非数字开头的字符串参与算术运算,字符串转成0
$str = 'alibbaba';
//如果字符串以数字开头,参与算术运算,只有数字部分会参与运算
$str = '10abc';
$str = '10.01abn';
//$str = 'abc100';
var_dump($str + 10);
//如果非数字开头的字符串参与算术运算,字符串转成0
$str = 'alibbaba';
//如果字符串以数字开头,参与算术运算,只有数字部分会参与运算
$str = '10abc';
$str = '10.01abn';
//$str = 'abc100';
var_dump($str + 10);
结果:float(20.01)
<?php
$f = 10.1;
// 任何一个浮点参与算术运算,结果必然是浮点
var_dump(10.0 + 10);
var_dump('10.0abc' * 10)
$f = 10.1;
// 任何一个浮点参与算术运算,结果必然是浮点
var_dump(10.0 + 10);
var_dump('10.0abc' * 10)
结果:float(20) float(20)
七、常量的定义与使用:
常量是一个简单值的标识符(名字)。
在脚本执行期间一个常量一旦被定义,就不能再改变或取消定义。
常量的命名规则:
常量默认为大小写敏感。按照惯例常量标识符总是大写的。
常量名和其他任何PHP标签遵循同样的命名规则。合法的常量名以字母或下划线开始,后面跟任何字母,数字或下划线。
常量的定义方式:
我们可以用const 和 define() 函数来定义常量。
格式:const DB_NAME = 'bbs';
const DB_HOST = 'localhost';
define('DB_USER','root');
语法:bool define(string name ,mixed value ,[bool case_insensitive])
其中name表示常量名,value表示常量值或表达式,但是常量只能包含标量数据(integer、float、string和boolean)。
第三个[]中的为可选参数case_insensitive设置为true时则表示常量名不区分大小写。
<?php
define("CON_INT",100);
//输出:100
echo CON_INT;
define("GREETING","HELLO you",true);
//输出:HELLO you
echo GREETING;
//输出:HELLO you
echo constant ("Greeting");
define("CON_INT",100);
//输出:100
echo CON_INT;
define("GREETING","HELLO you",true);
//输出:HELLO you
echo GREETING;
//输出:HELLO you
echo constant ("Greeting");
常量和变量的不同:
常量前面没有美元符号($);
使用 const 和 define()定义;
遵循变量的命名规则;
一旦定义不能更改和取消;
全局有效;
常量的值只能是标量(4种);
建议使用大写;
可以用函数 constant()来读取常量的值;
用 get_defined_constants()可以获得所有已定义的常量列表。
预定义常量:
__LINE__
__FILE__
__FUNCTION__
__CLASS__
__METHOD__
<?php
const DB_HOST = 'localhost';
define('DB_USER','root');
echo DB_HOST;
echo DB_USER;
// 返回当前文件的完整路径和文件名
echo __FILE__;
//返回当前所在的行数
echo __LINE__;
function show()
{
// 当前函数名
echo __FUNCTION__;
echo 'aaaa';
}
// 调用函数方式:函数名+()
show();
/*
// 返回当前类名
__CLASS__;
//返回当前的方法名
__METHOD__;
*
const DB_HOST = 'localhost';
define('DB_USER','root');
echo DB_HOST;
echo DB_USER;
// 返回当前文件的完整路径和文件名
echo __FILE__;
//返回当前所在的行数
echo __LINE__;
function show()
{
// 当前函数名
echo __FUNCTION__;
echo 'aaaa';
}
// 调用函数方式:函数名+()
show();
/*
// 返回当前类名
__CLASS__;
//返回当前的方法名
__METHOD__;
*
八、定界符:
前边提到字符串可以用三种字面上的方法定义:
- 单引号 '';
- 双引号"";
- 定界符<<<;
那么定界符的定义是:另一种给字符串定界的方法使用定界符语法(“<<<”)。应该在 <<< 之后提供一个标识符(EOT),然后是字符串,然后是同样的标识符结束字符串。
定界符中标识符的命名规则与变量的命名规则一样。只能包含字母数字下划线,而且必须以下划线或非数字字符开始。
注:结束标识必须从行的第一列开始,并且所在的行不能包含任何其它字符,可能除了一个分号(;)之外,空格以及空白制表符都不可以。这尤其意味着该结束标识符不能被缩进,而且在分号之前和之后都不能有任何空格或制表符。如果破坏了这条规则使得结束标识符不“干净”,则它不会被视为结束标识符,PHP 将继续寻找下去。如果在这种情况下找不到合适的结束标识符,将会导致一个在脚本最后一行出现的语法错误。
不能用定界符语法初始化类成员。用其它字符串语法替代。
定界符文本的表现和双引号字符串一样,可以使用转义符号,可以解析变量,只是没有双引号。
定界符通常用于从文件或者数据库中大段的输出文档。
<?php
$db_host = '127.0.0.1';
$db_user = 'lily';
$db_pwd = '123456';
$str=<<<ETO
<?php
//开启会话
session_start();
//设置网页字符集
header("content-type:text/html;charset=utf-8");
//设置时区
date_default_timezone_set('PRC');
//数据库相关设置
const DB_HOST = '$db_host';
const DB_USER = '$db_user';
const DB_PWD = '$db_pwd';
const DB_NAME = 'bbs81';
const DB_CHARSET = 'utf8';
// 链接数据库
$link = mysql_connect(DB_HOST,DB_USER,DB_PWD)or die('连接数据库失败');
mysql_select_db(DB_NAME);
mysql_set_charset(DB_CHARSET);
ETO;
// 将字符串写入指定文件,如果文件不存在自动创建
file_put_contents('config.php',$str);
$db_host = '127.0.0.1';
$db_user = 'lily';
$db_pwd = '123456';
$str=<<<ETO
<?php
//开启会话
session_start();
//设置网页字符集
header("content-type:text/html;charset=utf-8");
//设置时区
date_default_timezone_set('PRC');
//数据库相关设置
const DB_HOST = '$db_host';
const DB_USER = '$db_user';
const DB_PWD = '$db_pwd';
const DB_NAME = 'bbs81';
const DB_CHARSET = 'utf8';
// 链接数据库
$link = mysql_connect(DB_HOST,DB_USER,DB_PWD)or die('连接数据库失败');
mysql_select_db(DB_NAME);
mysql_set_charset(DB_CHARSET);
ETO;
// 将字符串写入指定文件,如果文件不存在自动创建
file_put_contents('config.php',$str);
在字符串中常用的转义字符:在需要转义的符号前输入“\”
九、数据类型之间相互转换:
PHP在变量定义中不需要明示变量的类型定义,变量类型是根据使用该变量的上下文所决定的。
类型转换时指将变量或值从一个数据类型转换成其他数据类型。转换的方法有两种:1、自动转换;2、强制转换
类型的强制转换:PHP 中的类型强制转换和 C 中的非常像:在要转换的变量之前加上用括号括起来的目标类型。
允许的强制转换有:
- (int),(integer) - 转换成整型
- intval()获取变量的整数值
- (bool),(boolean) - 转换成布尔型
- (float),(double),(real) - 转换成浮点型
- (string) - 转换成字符串
- (array) - 转换成数组
- (object) - 转换成对象
注意:在括号内允许有空格和制表符,为了将一个变量还原为字符串,还可以将变量放置在双引号中。
<?php
$str = 'abc';
$str = 123;
$str = array();
echo gettype($str);
echo'<hr>';
//强制将字符串转换为整型
$str = '11xx2344zz';
$result =(int) $str;
echo gettype($str);
echo '<br>';
//var_dump($result);
echo gettype($result);
echo'<hr>';
$arr = array(1,2);
$result= (int) $arr;
echo gettype($arr);
echo '<br>';
echo gettype($result);
echo'<hr>';
//强制将字符串转换为数组
$str ='a,b,c';
$result = (int) $str;
echo gettype($str);
echo '<br>';
echo gettype($result);
echo '<br>';
echo $result;
echo '<hr>';
//强制转换为字符串
$str = 1;
$result = (string) $str;
echo gettype($str);
echo '<br>';
echo gettype($result);
echo '<br>';
echo $result;
echo '<br>';
var_dump($result);
echo '<hr>';
//获取数据的类型
$num = 10;
echo gettype($num);
echo '<hr>';
//获取变量的整数值(为啥结果中不显示呢?)
$result = intval($num);
var_dump($result);
echo '<hr>';
//获取变量的字符串值
var_dump(strval(123456));
$str = 'abc';
$str = 123;
$str = array();
echo gettype($str);
echo'<hr>';
//强制将字符串转换为整型
$str = '11xx2344zz';
$result =(int) $str;
echo gettype($str);
echo '<br>';
//var_dump($result);
echo gettype($result);
echo'<hr>';
$arr = array(1,2);
$result= (int) $arr;
echo gettype($arr);
echo '<br>';
echo gettype($result);
echo'<hr>';
//强制将字符串转换为数组
$str ='a,b,c';
$result = (int) $str;
echo gettype($str);
echo '<br>';
echo gettype($result);
echo '<br>';
echo $result;
echo '<hr>';
//强制转换为字符串
$str = 1;
$result = (string) $str;
echo gettype($str);
echo '<br>';
echo gettype($result);
echo '<br>';
echo $result;
echo '<br>';
var_dump($result);
echo '<hr>';
//获取数据的类型
$num = 10;
echo gettype($num);
echo '<hr>';
//获取变量的整数值(为啥结果中不显示呢?)
$result = intval($num);
var_dump($result);
echo '<hr>';
//获取变量的字符串值
var_dump(strval(123456));
输出结果:
array
string
integer
array
integer
string
integer
0
integer
string
1
string(1) "1"
integer
int(10)
string(6) "123456"
十、变量类型的测试函数:
is_bool():判断是否是布尔型
is_int()、is_integer()和is_long():判断是否为整型。
is_float()、is_double()和is_real():判断是否为浮点型
is_string():判断是否为字符串
is_array():判断是否为数组
is_object():判断是否为对象
is_resource():判断是否为资源类型
is_null():判断是否为null
is_scalar():判断是否为标量
is_numeric():判断是否是任何类型的数字和数字字符串
is_callable():判断是否是有效的函数名
函数:bool settype ( mixed var, string type )
是将变量 var 的类型设置成 type。
<?php
header("content-type:text/html;charset=utf-8");
$arr = array('username'=>'jack','sex'=>'男','age'=>23);
// $arr = 'abc';
/*echo '<pre>';
print_r($arr);
var_dump($arr);*/
$arr = '新中国成立啦';
if(is_array($arr)){
echo '<pre>';
print_r($arr);
}else{
echo '<pre>';
var_dump($arr);
}
// 判断是否是一个有效的函数
if(is_callable('xx')){
echo '这是一个有效的函数';
}else{
echo '这不是一个函数';
}
function xx()
{
echo 'xxx';
}
$str = '1000abc';
header("content-type:text/html;charset=utf-8");
$arr = array('username'=>'jack','sex'=>'男','age'=>23);
// $arr = 'abc';
/*echo '<pre>';
print_r($arr);
var_dump($arr);*/
$arr = '新中国成立啦';
if(is_array($arr)){
echo '<pre>';
print_r($arr);
}else{
echo '<pre>';
var_dump($arr);
}
// 判断是否是一个有效的函数
if(is_callable('xx')){
echo '这是一个有效的函数';
}else{
echo '这不是一个函数';
}
function xx()
{
echo 'xxx';
}
$str = '1000abc';
//将字符串转换成整型
var_dump($str);
php是世界上最好的编程语言,没有之一