1. 变量的类型转换方式?
转换方式 |
函数 |
临时转换 |
(int),(string),(array),(object)… |
自动转换 |
根据操作符对操作数的类型要求进行 |
强制转换 |
settype() |
//1. 临时转换
$uid = 25;
var_dump($uid,(string)$uid,(float)$uid);// int(25) string(2) "25" float(25)
// 2. 系统自动转换
// 1) "+","-" 要求参与计算的数据都是数值类型,如果不是,就是会触发自动转换
$foo = '100pages';
@$foo += 200;
var_dump($foo);// int(300)
$foo += 12.3;
var_dump($foo);// float(312.3)
@$res = null + '10 kg rice';
var_dump($res);// int(10)
// 2) . 字符串拼接符
echo 'how are you' . 100 . '<br>';
// 3) 布尔类型转换
@var_dump($email);//null
//null===>false
if(!@$email)
{
echo 'email不存在';
}
/**
* 以上类型转换都无法改变被转换变量本身的类型,
* 而是通过转换, 将得到的新类型的数据赋给了新的变量,
* 原变量的类型与值保持不变
*/
$p = $_GET["page"];
echo gettype($p);// string
// 3.类型永久转换
settype($p,'integer');
echo gettype($p);// integer
2. 变量值传递与值引用的区别?
- 传值赋值: 将源变量($a)的值复制出来一份新的值内存空间地址给另一个变量($b), 修改两个变量的值 互不影响
- 引用赋值 &地址引用符: 新的变量 $price2 引用/指向了原始变量, 互相影响, 没有复制操作,因而引用赋值更加快
/**
* 1. 传值赋值: 将源变量($a)的值复制出来一份新的值内存空间地址给另一个变量($b), 修改两个变量的值 互不影响
*/
$a = 45;
$b = $a;
printf('$a的值为%d,$b的值为%d<br>',$a,$b);// $a的值为45,$b的值为45
$a = 450;
printf('$a的值为%d,$b的值为%d<br>',$a,$b);// $a的值为450,$b的值为45
/**
* 2. 引用赋值 &地址引用符
* 新的变量$price2 引用/指向了原始变量, 互相影响, 没有复制操作,因而引用赋值更加快
*/
$price1 = 25;
$price2 = &$price1;
printf('$price1的值为%d,$price2的值为%d<br>',$price1,$price2);
// $price1的值为25,$price2的值为25
$price1 = 250;
printf('$price1的值为%d,$price2的值为%d<br>',$price1,$price2);
// $price1的值为250,$price2的值为250
$foo = 35;
$bar = &$foo;
unset($foo);//仅仅是将$foo,$bar互相取消关联
var_dump($bar);//int(35)
3. 变量的作用域?
- 局部变量:定义在函数中的变量,只能在函数中访问,在函数外无法访问。
- 全局变量:无法在函数内直接调用,需要使用关键字 global 或者 $GLOBALS超全局变量,才能在函数中访问。
// 变量的作用域问题
function demo(){
//$a,$b 定义在函数内部, 属于局部变量, 只在函数内部访问有效
$a = 100;
$b = 200;
echo ($a+$b);
}
demo();
// echo $a;非法访问,在函数外部不能访问到布局变量
// 全局变量 无法在函数内部直接调用
$one = 100;
$two = 200;
function test(){
// 1. global
global $one,$two;
echo '运算结果是: '. ($one+$two);
// 2. $GLOBALS超全局变量
echo '运算结果是: '. ($GLOBALS['one']+$GLOBALS['two']);
}
test();
4.php中魔术常量有哪些?
__LINE__
:文件中的当前的行数。__FILE__
:当前文件所在的文件位置。__DIR__
:当前文件所在的目录。__FUNCTION__
:当前函数的名字。__CLASS__
:当前类的名字。__METHOD__
:类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)和FUNCTION一样。__NAMESPACE__
:当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。