引用变量
- 概念:用不同的名字访问同一个变量内容
- 定义方式:&
工作原理:
$a = 2;
$b = $a;
// b 和 a 都指向一个内存
// COW Copy On Write
// 只有对a 或 b 进行写实操作,才会重新开辟一个内存
查看内存使用情况,返回int
var_dump(memory_get_usage());
zval 变量容器
xdebug_debug_zval('a');
$a = range(1,3);
xdebug_debug_zval('a');
$b = &$a;
xdebug_debug_zval('a');
xdebug_debug_zval('b');
a:
(refcount=1, is_ref=0)
array (size=3)
0 => (refcount=0, is_ref=0)int 1
1 => (refcount=0, is_ref=0)int 2
2 => (refcount=0, is_ref=0)int 3
a:
(refcount=2, is_ref=1)
array (size=3)
0 => (refcount=0, is_ref=0)int 1
1 => (refcount=0, is_ref=0)int 2
2 => (refcount=0, is_ref=0)int 3
b:
(refcount=2, is_ref=1)
array (size=3)
0 => (refcount=0, is_ref=0)int 1
1 => (refcount=0, is_ref=0)int 2
2 => (refcount=0, is_ref=0)int 3
refcont
被指向的个数
is_ref
是不是被引用 0/1
引用中
unset
只会取消引用,不会销毁
对象
class Person{
public $name='zhangsan';
}
$p1 = new Person();
$p2 = $p1;
$p2->name = 'lisi';
p1:
(refcount=1, is_ref=0)
object(Person)[1]
public 'name' => (refcount=2, is_ref=0)string 'zhangsan' (length=8)
p1:
(refcount=2, is_ref=0)
object(Person)[1]
public 'name' => (refcount=2, is_ref=0)string 'zhangsan' (length=8)
p1:
(refcount=2, is_ref=0)
object(Person)[1]
public 'name' => (refcount=0, is_ref=0)string 'lisi' (length=4)
在对象中,本身就是引用传递,引用状态
is_ref
为 0
常量及数据类型
php 字符串中可以使用哪三种定义方式,以及各自的区别是什么?
定义方式
单引号、双引号、 heredoc|newdoc
区别:
单引号: 不能解析变量
不能解析转义字符,只能解析单引号和反斜线本身
变量和字符串间可以用.
连接
双引号: 可以解析变量,变量可以使用特殊字符和
{}
包含 特殊字符包含'&|
等
双引号可以解析所有转义字符
可以使用.
来连接
单引号效率高于双引号
```php
// heardoc 相当于双引号 EoT 可任意代替
//
$str = <<< EoT
...
EoT;
// newdoc 相当于单引号
$str = <<< 'EoT'
...
EoT;
```
数据类型
PHP三大数据类型
标量、复合、特殊
标量:浮点、整形、字符串、波尔
复合:数组、对象
特殊:null 对象
-
浮点型不能用于比较
$a = 0.1; $b = 0.2; if($a+$b==0.3) return true; else return false; // 结果为false;
-
布尔类型
false 的七种情况 :0, 0.0 , ' ', '0' , false , array() , NULL
-
数组类型
超全局数组
$GLOBALS // 包含以下所有
$_SESSION
$_SERVER
$_FILES
$_ENV
$REQUEST // 包含 get/post/cookie
$_GET
$_POST
$COOKIE
-
NULL
null 不区分大小写
定义方法: 直接赋值为null、未定义的变量、unset销毁的变量 -
常量
定义方式:const、define
const:语言结构、更快,可以定义类的常量
define:函数,不能定义类的常量
常量一经定义,不能被修改、删除预定义常量
__FILE__ __LINE__ __DIR__ __FUNCITON__ __CLASS__ __TRAIT__ __METHOD__ __NAMESPACE__