1. 程式人生 > >php權威編程有趣部分

php權威編程有趣部分

時間 ons 參數類型 pen www 繼承 防止 一個 運行時

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);
}

//執行ping,將結果寫入a.php

  

24.正則表達式定界符可以用|和@

php權威編程有趣部分