php权威编程有趣部分
1.isset empty
如果遇到null,isset判断为false;empty 判断为true
isset(var1, var2,...) 可以判断多个变量
2.unset
unset可以取消之前定义的变量,如果该变量没有被其他变量引用的话,就会释放这个变量占用的内存空间.
3.php5中对象的传递是一个引用传递
4.== 和 ===
==比较时,执行类型转换,再比较;
===不仅比较类型,还比较数值.
5.++$var 和 $var++的区别
++$var: 前加操作,$val的值+1,表达式返回$val新值(增加1);前加意思就是先对变量+1,再返回该变量的值
$var++: 后加操作,$val的值+1,表达式返回$val原来的值;后加就是先返回变量的值,再对变量+1
字符串也可以递增/递减:
$a = 'A';
echo $a++; // 输出 A
echo ++$a; // 输出 B
6.""和''区别
"":替换变量,进行转义
'':不对变量进行替换,仅对\'转义和在单引号前面的\\进行转义
7.include和require
include:如果包含文件或URL不存在,仅发出一个警告,不会终止程序运行;
require:如果包含文件或URL不存在,停止程序运行;
除此外,两者再无区别;
8.global
global $val1, $val2...;
不建议使用,运行时造成赋值混乱,不支持unset()等.
9.通过引用返回值:
在函数名前加&,将返回变量的地址;而不是变量的拷贝.
<?php
function & getNum($name) {
return $GLOBALS[$name];
}
$num = 100;
$val = & getNum('num'); // 返回了$num的地址
print $val;
$num = 500; // $num的更改,引起了$val的更改,因为$val通过引用指向了$num的地址.
echo '<br>';
echo $val;
?>
输出:
100
500
不经常用到,如果使用,请小心使用.
10.按值传递和按引用传递:
使用按值传递还是按引用传递,是在函数定义的时候设置,而不是在调用的时候设置.
function func(&$val) {
.......
} func(100);
11.静态变量仅在局部函数域中存在且只被初始化一次,当程序执行离开此作用域时,其值不会消失,会使用上次执行的结果。
12.因为构造函数不能产生返回值,从构造函数内产生错误最常用的做法是抛出一个异常.
13.php并不能保证析构函数调用的准确时间点.
14.接口是可以包含常量的
<?php
interface Log
{
const LOG_NAME = 'log';
public function log();
} class Dog implements Log
{
public function log()
{
echo Log::LOG_NAME . ':' . date('Y-m-d');
}
} $dog = new Dog();
$dog->log();
15.接口可以多重继承,接口也可以继承接口.
16.异常就是异常,异常应该被用来处理问题,而不是控制流程
17.可以设置参数类型:
function func(MyClass $obj) {
....
}
18.call 和 call_user_function_array()
<?php
class Hello
{
public function say()
{
echo 'hello world';
}
} class HelloDelegator
{
private $obj; public function __construct()
{
$this->obj = new Hello();
} public function __call($method, $args)
{
return call_user_func_array(array($this->obj, $method), $args);
}
} $hello = new HelloDelegator();
$hello->say();
19.__autoload和spl_autoload_registe:自动注册类文件
20.ArrayAccess接口:用数组的方式访问对象
代码示例:
class User implements ArrayAccess
{
private $users; // 是否存在
public function offsetExists($offset)
{
return isset($this->users[$offset]);
} // 取值
public function offsetGet($offset)
{
return $this->users[$offset];
} // 赋值
public function offsetSet($offset, $value)
{
return $this->users[$offset] = $value;
} public function offsetUnset($offset)
{
unset($this->users[$offset]);
} } $user = new User();
if (isset($user['100'])) {
echo 'no set';
} else {
$user['100'] = 'hello';
} echo $user['100'];
unset($user['100']);
20.settype(&val, type) // 通用类型转换
<?php
$a = '100';
settype($a, 'int');
echo $a;
21.在session被修改或赋值后,为防止session被锁,应该使用session_write_close()关闭session文件.
22.DirectoryIterator:文件夹遍历
<?php
$files = new DirectoryIterator('c:/'); foreach ($files as $f) {
echo $f . "\n";
}
23.proc_open与进程交互:
<?php
$fin = fopen('code.php', 'r');
$fou = fopen('a.php', 'w');
$desc = array(0 => $fin, 1 => $fou);
$res = proc_open('php', $desc, $pipe); if ($res) {
proc_close($res);
} // 执行 php code.php 并将其结果写入a.php <?php
$fou = fopen('a.php', 'w');
$desc = array(1 => $fou);
$res = proc_open('ping www.baidu.com', $desc, $pipe); if ($res) {
proc_close($res);
}
24.正则表达式定界符可以用|和@
25.抽象类是可以包含静态方法的,并且可以被外部直接调用,这并没有违背抽象类不能被实例化的原则.
php权威编程有趣部分的更多相关文章
- 安卓权威编程指南 - 第五章学习笔记(两个Activity)
学习安卓编程权威指南第五章的时候自己写了个简单的Demo来加深理解两个Activity互相传递数据的问题,然后将自己的学习笔记贴上来,如有错误还请指正. IntentActivityDemo学习笔记 ...
- C++编程有趣的标题1 于1~9填写的运算结果的中间符号等于100
于1 2 3 4 5 6 7 8 9将九个数字"+"要么"-"符号使得结果100,编程的所有组合. 注意:数字顺序不能改变 <pre name=" ...
- 安卓权威编程指南-笔记(第21章 XML drawable)
在Andorid的世界里,凡事要在屏幕上绘制的东西都可以叫drawable,比如抽象图形,Drawable的子类,位图图形等,我们之前用来封装图片的BitmapDrawable就是一种drawable ...
- Android权威编程指南读书笔记(1-2章)
第一章 Android应用初体验 1.4用户界面设计 <?xml version="1.0" encoding="utf-8"?> ADT21开发版 ...
- 《Android权威编程指南(The Big Nerd Ranch Guide)(第二版)》12.4挑战练习
本书第12章是讲解Dialog.12.4挑战练习是在CriminalIntent项目中,再增加一个TimePickerFragment的对话框fragment.通过在CrimeFragment用户界面 ...
- 看 《android权威编程指南》 的笔记
Android 编译工具 确保ant已安装并正常运行,android sdk的tools/和platform-tools目录包含在可执行文件的搜索路径中 切换到项目目录并执行以下命令: android ...
- 安卓权威编程指南-笔记(第27章 broadcast intent)
本章需求:首先,让应用轮询新结果并在有所发现时及时通知用户,即使用户重启设备后还没有打开过应用.其次,保证用户在使用应用时不出现新结果通知. 1. 一般intent和broadcast intent ...
- 安卓权威编程指南 挑战练习(第26章 在 Lollipop 设备上使用 JobService)
26.11 挑战练习:在 Lollipop 设备上使用 JobService 请创建另一个 PollService 实现版本.新的 PollService 应该继承 JobService 并使用 Jo ...
- 安卓权威编程指南-笔记(第24章 Looper Handler 和 HandlerThread)
AsyncTask是执行后台线程的最简单方式,但它不适用于那些重复且长时间运行的任务. 1. Looper Android中,线程拥有一个消息队列(message queue),使用消息队列的线程叫做 ...
随机推荐
- DataTable转换为实体集合
using System; using System.Collections; using System.Collections.Generic; using System.Data; using S ...
- 安装ubuntu配置ssh
vmware安装ubuntu后,必须配置网卡,重新设置MAC,否则无法连接网络(具体方法百度)NAT直连模式xshell连接时host为ifconfig显示的IP地址,不需要设置端口转发,端口还是22 ...
- struct timeval和gettimeofday()
http://www.cppblog.com/lynch/archive/2011/08/05/152520.html struct timeval结构体在time.h中的定义为: struct ti ...
- web前端工作五年了,我来告诉你如何系统的学习现在的JavaScript
一.入门 1:熟悉DIV+CSS布局 使用DIV+CSS布局标准网页,可以使前端XHTML代码更少.结构更清晰,这有利于轻松用JavaScript操作DOM 比如,要展示一个3行3列的列表,如果用传统 ...
- Codeforces Gym 101775D Mr. Panda and Geometric Sequence(2017-2018 ACM-ICPC Asia East Continent League Final,D题,枚举剪枝)
题目链接 ECL-Final 2017 Problem D 题意 给定$2*10^{5}$组询问,每个询问求$l$到$r$之间有多少个符合条件的数 如果一个数小于等于$10^{15}$, 并且能被 ...
- Controlled Tournament(状态压缩DP)
Controlled Tournament 题意 n 名选手进行淘汰赛,R[i][j] = 1 表示 i 能胜过 j.要求通过安排淘汰赛使得,m 选手获得最终胜利,问使得比赛数最少的方案数. 分析 设 ...
- 洛谷——P1579 哥德巴赫猜想(升级版)
P1579 哥德巴赫猜想(升级版) 题目背景 1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和.质数是指除了1和本身之外没有其他约 ...
- Python数据结构:序列(列表[]、元组())与映射(字典{})语法总结
一.概述:Python中两种基本的数据结构是序列和映射,序列包含:可变的列表和不可变的元组:而当序列不够用时就出现了映射:字典.列表中的元素是可以变化的,元组里面的元素一旦初始化后就不可更改.列表和元 ...
- 关于spring.net的面向切面编程 (Aspect Oriented Programming with Spring.NET)-使用工厂创建代理(Using the ProxyFactoryObject to create AOP proxies)
本文翻译自Spring.NET官方文档Version 1.3.2. 受限于个人知识水平,有些地方翻译可能不准确,但是我还是希望我的这些微薄的努力能为他人提供帮助. 侵删. 如果你正在为你的业务模型使用 ...
- 设计模式之桥接模式(php实现)
github地址:https://github.com/ZQCard/design_pattern /** * 桥接模式 * 优点: * 1.分离抽象接口及其实现部分.提高了比继承更好的解决方案. * ...