php 面试手记

引用变量

  • 概念:用不同的名字访问同一个变量内容
  • 定义方式:&

工作原理:

	$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__
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值