1.面试(1)

语言结构:
这里写图片描述
这里写图片描述

这里写图片描述


这里写图片描述
这里写图片描述
这里写图片描述


1.什么是引用变量
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

demo1.php

<?php

$a = range(1,100);

var_dump(memory_get_usage());// 用这个函数验证

// cow, copy on write 只有修改这2个变量当中的一个,才进行copy(开内存)
$b = $a;

var_dump(memory_get_usage());

// 对 a 进行修改, 此时才开辟新的空间
$a = range(1,100);

var_dump(memory_get_usage());

这里写图片描述

这里写图片描述

demo2.php

<?php

$a = range(1,100);

var_dump(memory_get_usage());// 用这个函数验证

// 2个变量指向一个空间,不会开辟空间了
$b = &$a;

var_dump(memory_get_usage());

// 对 a 进行修改, 此时才开辟新的空间
$a = range(1,100);

var_dump(memory_get_usage());

这里写图片描述

demo3.php

<?php

// zval 变量容器

$a = range(0,3);

xdebug_debug_zval('a');

$b = $a;

xdebug_debug_zval('a');

// 修改 a

$a = range(0,3);
xdebug_debug_zval('a');

这里写图片描述

demo4.php

<?php

$a = range(0,3);

xdebug_debug_zval('a');

$b = &$a;

xdebug_debug_zval('a');

$a = range(0,3);

xdebug_debug_zval('a');

这里写图片描述
这里写图片描述

demo5.php
<?php

// unset 只会取消引用,不会销毁内存空间
$a = 1;

$b = &$a;

unset($b);

echo $a;

这里写图片描述

demo6.php

<?php

//对象本身就是引用传递,如果需要复制 用 clone
class Person
{
    public $name = 'zhang 3';
}

$p1 = new Person();
xdebug_debug_zval('p1');

$p2 = $p1;
xdebug_debug_zval('p1');

$p2->name = 'li 4';
xdebug_debug_zval('p1');

这里写图片描述

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述


2.常量及数据类型
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

$GLOBALS 包含其他所有,
$_REQUEST 包含 $_GET,$_POST,$_COOKIE

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

3.运算符
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

4.流程控制
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

5.自定义函数
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

6.正则表达式
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

<?php

$str = '中文';
//$pattern = '/[\x{4e00}-\x{9fa5}]+/u'; // utf-8 匹配

$pattern = '/['.chr(0xb0).'-'.chr(0xf7).']['.chr(0xa1).'-'.chr(0xfe).']/';//gb2312匹配

preg_match($pattern, $str, $match);

var_dump($match);

这里写图片描述

7.文件以及目录
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

<?php

// 1.打开文件
// 2.将文件的内容读取出来,在开头加入 hello world
// 3.将拼接好的字符串写回文件

$file = './hello.txt';
$handle = fopen($file, 'r');
$content = fread($handle, filesize($file));

$content = 'Hello World'.$content;
fclose($handle);

$handle = fopen($file, 'w');
fwrite($handle, $content);
fclose($handle);

这里写图片描述

遍历目录:

<?php

$dir = './test';

// 1.打开目录
// 2.读取目录中文件
// 3.如果文件类型是目录,继续打开,如果是文件,输出文件名称
// 4.读取子目录的文件
// 5.关闭目录

function loopDir($dir)
{
    $handle = opendir($dir);

    while ( false !== ($file = readdir($handle))  ) {
        if ( $file != '.' && $file != '..' ) {
            echo $file.'<br/>';
            if ( filetype($dir.'/'.$file) == 'dir' ) {
                loopDir($dir.'/'.$file);
            }
        }
    }
}

loopDir($dir);

8.会话控制
这里写图片描述
这里写图片描述

cookie : 由服务器发送给客户端的片段信息,但存储在客户端浏览器的内存或者硬盘当中的技术.

优缺点:保持在客户端,不占用服务器空间。
       用户有权禁用 

这里写图片描述
这里写图片描述
这里写图片描述

分布式 session ,可以用 redis

这里写图片描述
这里写图片描述
这里写图片描述


9.面向对象
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述


10.网络协议
这里写图片描述
这里写图片描述

1XX :  接收请求,正在处理
2XX :  成功状态码
3XX :  重定向,需要附加操作才能完成请求
4XX : 客户端错误,服务器无法请求
5XX :  服务器处理请求出错了

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

区别:
1. 做后退和刷新,get没有变化是无害的,post数据会被重新提交
2. get 可以被收藏为书签,post 不行
3. get 可以被浏览器缓存,post 不行
4. get 请求的编码类型为 application/x-www-form-urlencoded;
   post 有3中。multipart/form-data, text/plain,application/x-www-form-urlencoded
   二进制数据使用多重编码,如文件上传
5. get 在历史记录当中,会被保存到浏览器中,而 post 不会
6. get 有数据长度限制,url长度限制(2048), post 没有限制
7. 数据类型限制:get 只允许 ASCII 码(gb2312),post 没有限制
8. 安全性:post 比 get 安全

这里写图片描述

FTP : 21
Telnet : 23
SMTP : 25
POP3 : 110
HTTP : 80
DNS : 53

11.开发环境配置
这里写图片描述
这里写图片描述


<?php

$array1 = ["k1"=>1,"k2"=>2,"k3"=>3];
/*代码片段1*/
foreach($array1 as $k1=> &$v1)
{
    $v1 = $v1+1;
}
xdebug_debug_zval('array1');
//array1: (refcount=1, is_ref=1)=array ('k1' => (refcount=1, is_ref=1)=2, 'k2' => (refcount=1, is_ref=1)=3, 'k3' => (refcount=2, is_ref=1)=4)
//其中 refcount 表示引用计数,is_ref 表示是否为引用,0 表示不是引用,1 表示是引用
xdebug_debug_zval("v1");
//v1: (refcount=2, is_ref=1)=4

/*代码片段2*/
//其实上面的 foreach 内部相当于下面的代码片段,但是实际情况会复杂很多,这里只是类比
$array2 = ["k1"=>1,"k2"=>2,"k3"=>3];
$v2 = &$array2['k1'];//声明$v2变量是$array2['k1']的reference(译作:引用)
$v2 = $v2+1;
$v2 = &$array2['k2'];
$v2 = $v2+1;
$v2 = &$array2['k3'];
$v2 = $v2+1;
xdebug_debug_zval('array2');
//array2: (refcount=1, is_ref=0)=array ('k1' => (refcount=1, is_ref=1)=2, 'k2' => (refcount=1, is_ref=1)=3, 'k3' => (refcount=2, is_ref=1)=4)
xdebug_debug_zval("v2");
//v2: (refcount=2, is_ref=1)=4
//接下来我们应该把 $v2 变量 unset 掉,避免对 $array2['k3'] 的值产生副作用
//这时发现 $v2 成了未初始化的变量
unset($v2);
xdebug_debug_zval('v2');
//v2: (refcount=0, is_ref=0)=*uninitialized*

//我们再次给 $v2 赋值发现它已经非引用变量
$v2 = 111;
xdebug_debug_zval('v2');

http://blog.csdn.net/ethan19/article/details/49252765
https://gitee.com/nodestudy/phpgod/blob/master/zh/02.2.md

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值