php基础知识(一)

闭包的理解

内外两个函数

外部函数执行完毕后

由于内部函数被外部函数引用着

导致其内部的变量继续存活,而不是函数执行完毕后,立刻销毁

闭包的代码实现

function A(){

  var count = 0;

  function B(){

    count ++;

    console.log(count);

  }

  return B;

}

var C = A();

C();// 1

C();// 2

C();// 3

PHP内存回收机制

垃圾回收机制

引用计数器的理解

为内存对象绑定计数器

当内存对象被引用时 +1操作

当内存对象被撤销时 -1操作

当计数器等于0时 表明该内存对象没有被引用 会进行垃圾回收

 

(回收,需要断定变量有没被使用)

引用计数器使用过程中存在的问题

 

当两个或两个以上的对象互相引用形成环状的时候,内存对象不会被销毁。

 

但是,php5.3以后提供了同步周期算法来检测环状的存在,避免了这个问题

PHP内存溢出的解决方法

1)变量

 变量用完后,及时销毁

 尽量少用静态变量

 

2)对象

   对象用完后及时析构

 数据库用完后及时关闭

 

3)数组

 数组分批处理

 

4)内存

 增加内存

Unset无法销毁变量释放内存的问题

1)变量占用内存空间未到256字节

 

2)还有别的变量引用

单例模式原理

一个类中只有一个实例,并且可以自行实例化,向整个系统提供这个实例

 

可以节省资源

避免重复实例化

单例模式实现的代码

(重点记忆)

Class singleton{

  Private Static  $obj = null;

  Private function __constract(){}

  Private function __clone(){}

  Public static function getInstance(){

        If( !is_object(self::$obj)){

               Self::$obj = new self;

         }

         Return self::$obj;

   }

}

工厂模式

1)简单工厂

2)工厂方法

3)抽象工厂

 

简单工厂:只有一个工厂

工厂方法:每一个产品有对应的工厂

抽象工厂:多个产品的等级结构

观察者模式

    当一个对象的状态发生改变时,其他的对象会全部收到通知,并且会自动跟新

    观察者模式实现了低耦合,非侵入性的通知跟新机制

 

注册 下订单

警察来了,就通知各个走鬼赶紧逃

其中警察就是被观察者,走鬼是观察者

   

http://10.0.0.7:3030/contract/CreateTravelTest/server

当前脚本的名称(不包括路径和问号后面的内容)

$_SERVER[script_name]   

 

/index.php
 

$_server['script_filename']   

 

E:\WebSite\i.zglylx.com\index.php

当前页面的前一个页面的URL地址

$_SERVER[http_referer]

当前脚本的绝对路径

$_SERVER[http_host] . $_SERVER[request_uri]

客户端的IP地址

$_SERVER[remote_addr]

查询的字符串(包括了问号后面的内容)

$_SERVER[query_string]

当前运行的脚本所在的文档根目录

$_SERVER[document_root]

 

E:\WebSite\i.zglylx.com

%取模运算

$a % $b   $a为负值时,结果也是负值

Arsort

Array_reverse_sort

对数组进行逆向排序并保持索引关系

去掉<script></script>标签

/<script .*?>.*?</script>/si

Apache添加php模块

LoadModule  php5_module

c://php/php5apache2.dll

让服务器识别PHP文件

AddType application/x-httpd-php.php

是否开启函数在调用时强制参数按照引用传递

Allow_call_time_pass_reference

Php5和php7的区别

1)同一命名空间下的类,可以单use语句一次导入

2)魔术方法 __callstatic() __invoke()

3)trait灵活的代码重用机制

4)匿名类 new class实例化匿名类 可用来替代用后即焚的类

5)快捷的三元运算符

6)太空船运算符

太空船运算符

$c = $a <=> $b;

1)$a > $b , $c = 1;

2)$a = $b , $c = 0;

3)$a < $b , $c = -1;

Trait的代码,实现代码的重用

Trait HelloWorld{

  Public function sayHello(){

  Echo hello world;

}

}

 

Class theWorldIsNotEnough{

  Use HelloWorld;

  Public function sayHello(){

       Echo hello universe!;

   }

}

 

$o = new theWorldIsNotEnough( );

$o->sayHello( );  // hello universe!

 

如果去掉里面的sayHello方法,结果是:

Hello world;

优先顺序是当前类中的方法会覆盖trait方法。

__invoke()

当系统找不到方法时,就会自动调用这个方法

为什么php7比php5性能提升

1)减少了内存占用  因为变量存储字节减少

2)改善数组结构 数组元素 hash映射表分到同一块内存,减低内存占用,提升了cpu缓存命中率

3)执行效率提高 优化了参数传递的环节

交换,不使用第三变量

1)

$a = 12;

$b = 34;

$a = $a.$b

$b = substr($a,0,strlen($a)-strlen($b))

$a = substr($a,strlen($b));

2)

list($a,$b) = array($b,$a);

3)

$a=12;

$b=34;

$b=$a.#.$b;

$b=explode(#,$b);

$a=$b[1];

$b=$b[0];

JS可否定义二维数组

不可以,但可以模拟

Arr[0] = new array();

Referance && 正规变量

1)传递的是变量的地址,一旦变量发生改变,整个应用都可见

 

2)正规变量,传递的是数据的值

在现执行的脚本中插入函数库,插入PHP函数库

Require

include

PHP定义字符串的方式有哪些

1)单引号

2)双引号

3)Heredoc(双引号)

4)Nowdoc(单引号)

 

Heredoc 的结束标记不能包含任何其他的字符,除了“;”

单双引号的区别

1)双引号会替换变量的值,单引号会当做字符串输出

2)转义的支持不相同

3)性能速度问题,由于双引号的字符串需要检测是否含有$符号,单引号性能上更好

 

\ =>    \=>\   \\=>\   \n=>\n \r=>\r  \$=>\$

\=>\     \\=>\   \n=>  \r=>    \$=>$

 

 

 

 

 

如何获取和修改字符串的字符

可以通过字符串函数

什么是位,字节,字符

位:

二进制中最小的信息单位

 

字节:

把字分成一节节

计算机存储容量的计量单位

 

字符:

符号

计算机中使用的字母,数字,汉字

转换字符串编码

//将字符串string  编码由utf8转变成gbk

iconv("utf8","gbk",$string)

 

//设置字符的编码是utp-8

mb_convert_encoding("妳系我的友仔", "UTF-8", "GBK");

正则表达式的引擎有哪些,区别是

DFA

  文本导向的引擎,不要求回溯,永不测试相同的字符串2次

 

NFA

  运行的是贪婪的回溯匹配算法,会反复测试字符串,找到所有的扩展

如何测试一个正则表达式的性能

 

正则表达式的优化

使用正确的边界匹配符(^ $)

使用正确的元字符(w d)

使用正确的量词(+ *)

Preg_match && preg_match_all

preg_match($pattern, $subject, $matches);

print_r($matches);

Preg_replace

Preg_replace_all

 

Preg_split

 

Preg_grep

 

贪婪

懒惰

贪婪:

尽可能多

 

懒惰:

尽可能少,在后面有一个‘?’

 

 

发布了57 篇原创文章 · 获赞 1 · 访问量 3741
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章