闭包的理解 |
内外两个函数 外部函数执行完毕后 由于内部函数被外部函数引用着 导致其内部的变量继续存活,而不是函数执行完毕后,立刻销毁 |
闭包的代码实现 |
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)抽象工厂
简单工厂:只有一个工厂 工厂方法:每一个产品有对应的工厂 抽象工厂:多个产品的等级结构 |
观察者模式 |
当一个对象的状态发生改变时,其他的对象会全部收到通知,并且会自动跟新。 观察者模式实现了低耦合,非侵入性的通知跟新机制
注册 下订单 警察来了,就通知各个走鬼赶紧逃 其中警察就是被观察者,走鬼是观察者 |
当前脚本的名称(不包括路径和问号后面的内容) |
$_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 |
|
贪婪 懒惰 |
贪婪: 尽可能多
懒惰: 尽可能少,在后面有一个‘?’ |
|
|
php基础知识(一)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.