php中echo和print都是輸出的作用,但是兩者之間還是有細微的差別。echo輸出後沒有返回值,但print有返回值,當其執行失敗時返回flase。因此可以作為乙個普通函式來使用,例如執行$r = print "hello world"; 變數$r的值將為1。而且**中echo語句的執行效率要略快於print語句。
gettype()、is_array()、is_bool()、is_float()、is_integer()、is_null()、is_numeric()、is_object()、is_resource()、is_scalar() 和 is_string()
gettype() 會根據 引數型別返回下列值
「boolean」(從 php 4 起)
「integer」
「double」(如果是 float 則返回「double」,而不是「float」)
「string」
「array」
「object」
「resource」(從 php 4 起)
「null」(從 php 4 起)
「unknown type」
這裡需要注意的是 is_numeric()是用來判斷 變數是否是數字或者數字串的
當is_numeric() 的引數是數字或者數字字串的時候 返回true 否則返 false
1.在錯誤處理方面,使用include語句,如果發生包含錯誤,程式將跳過include語句,雖然會顯示錯誤資訊但是程式還是會繼續執行。但是,requre語句會提示乙個致命錯誤。
2.如果你的web程式使用了mvc這種對檔案包含強依賴的設計方法,請使用require_once。
3.關於包含檔案後作用域問題總結如下:
1).所有在被包含檔案中定義的函式和類在被包含後,在包含檔案裡都具有全域性作用域
2).被包含檔案的變數的作用域,隨著包含位置的變化而變化。比如如果是在函式中包含,被包含檔案的變數是區域性變數
檔案 a.php
1.$name="llj";2.class
teacher
6.}
7.function
showname()
檔案 index.php
1.functiona()
6.7.a();//
正常呼叫
8.9.showname();//
正常呼叫
10.11.var_dump($name);//
提示$name沒有定義 其$name作用域是a()函式,是區域性的
1) 載入失敗的處理方式不同:
include**`如果引入的檔案不存在`**,試圖繼續往下執行,報乙個warning
(如果你不介意之前的內容是否被包含,之後的內容都要執行,就使用include)
require如果**`引入的檔案不存在`**,報fatal error,不再繼續執行.
(如果之前的內容一定要被包含,才允許繼續執行之後的**,就使用require)
2) 包含檔案不存在或者語法錯誤的時候require是致命的,include不是。
3) include有返回值,而require沒有(可能因為如此require的速度比include快)。
4) 引入時間不同:
require通常使用方法,這個函式通常放在 php 程式的最前面,php 程式在執行前,就會先讀入 require所指定引入的檔案,使它變成 php 程式網頁的一部份。常用的函式,亦可以這個方法將它引入網頁中。
include通常使用方法,這個函式一般是放在流程控制的處理部分中。php 程式網頁在讀到 include的檔案時,才將它讀進來。這種方式,可以把程式執行時的流程簡單化
include/require 與 include_once /require_once的區別
_once 會自動判斷檔案是否已經引入,如果引入,不再重複執行.
即:保證被包含檔案只可能被引入一次.
(如果包含的檔案裡有定義函式,那麼被包含的檔案只能被包含一次,如果多次包含,就會出現函式重定義的錯誤,php是不執行函式重定義的,會出現致命錯誤,之後**不在執行)
有的檔案不允許被包含多次?
可以用_once來控制,但是,如果從檔案的設計上,比較規範,能保證肯定不會出現多次包含的錯誤,
這種情況下 建議用include,
因為include_once要檢測之前有沒有包含,效率沒有include高
關於include和require後面是否加括號的問題
理論上來說:include和require後面加不加括號對執行結果沒有區別,但是加上括號效率較低,所以後面能不加括號就不加括號。
1.作用上
同:包含檔案並執行(使用位置:函式內、函式外、方法內)
異:include_once/require_once是include/require基礎上進一步封裝,增加了乙個「檔案是否已經包含」的判斷
2.效能上
異:由於include_once/require_once是include/require基礎上進一步封裝,所以include_once/require_once比include/require速度慢
3.使用上
異:require包含的檔案存在錯誤或者不存在的話,那麼程式就會中斷執行了,並顯示致命錯誤;
include包含的檔案存在錯誤或者不存在的話,那麼程式不會中端,而是繼續執行,並顯示乙個警告錯誤。
所以一般重要檔案用require(如:類庫),不重要的用include(如:模板)
4.返回值上
同:如果被包含的檔案內用return返回,那麼無論include/require就會有return的值返回;
如果被包含的檔案內沒有使用return返回,那麼無論include/require,成功返回int(1),失敗返回boolean(false)
2.php<?php
return 'wakaka';
?>
1.php
<?php
$ret = include '2.php';
echo
$ret; //
輸出wakaka
?>
異:如果使用include_once/require_once包含檔案,成功返回boolean(true),失敗返回boolean(false),如果前面已經包含了該檔案,檔案內使用return返回,那麼再使用include_once/require_once包含相同檔案時是返回boolean(true)
在訪問php類中的成員變數或方法時,如果被引用的變數或者方法被宣告成const(常量)或者static(靜態屬性),那麼就必須使用域操作符::,而如果被引用的變數或者方法沒有被宣告成const或者static,那麼就使用指向操作符->。
在foreach迴圈中,如果我們需要更改迭代的元素或是為了提高效率,運用引用是乙個好辦法:
$arr = array(1, 2, 3, 4);foreach ($arr
as &$value
) //
now : $arr is array(2, 4, 6, 8)
這裡有個問題很多人會迷糊。迴圈結束後,$value並未銷毀,$value其實是陣列中最後乙個元素的引用,這樣在後續對$value的使用中,如果不知道這一點,會引發一些莫名奇妙的錯誤:)看看下面這段**:
$array = [1, 2, 3];echo
implode(',', $array), "\n";
foreach ($array
as &$value
) {}
echo
implode(',', $array), "\n";
foreach ($array
as$value
) {}
echo
implode(',', $array), "\n";
執行結果如下:
1,2,3
1,2,3
1,2,2
為什麼是這個結果呢?
我們來分析下。第乙個迴圈過後,$value是陣列中最後乙個元素的引用。第二個迴圈開始:
第一步:複製$arr[0]到$value(注意此時$value是$arr[2]的引用),這時陣列變成[1,2,1]
第二步:複製$arr[1]到$value,這時陣列變成[1,2,2]
第三步:複製$arr[2]到$value,這時陣列變成[1,2,2]
綜上,最終結果就是1,2,2
避免這種錯誤最好的辦法就是在迴圈後立即用unset函式銷毀變數:
$arr = array(1, 2, 3, 4);foreach ($arr
as &$value
) unset($value);
第三個引數如果為true,會比較型別,效能好,若不寫第三個引數,比如字串數字會先轉成數字,會花費大量時間,效能較低。
php函式和小知識點
語句 分支語句 a 5 if a 5 else if if.else if.else.if if的巢狀 switch a 迴圈語句 for i 0 i 10 i a 10 while a 0 函式四要素 返回型別,函式名 首字母大寫 引數,函式體 函式定義方式 function show 呼叫函式 ...
php的53個小知識點
1 如果能將類的方法定義成static,就盡量定義成static,它的速度會提公升將近4倍。2 row id 的速度是 row id 的7倍。3 echo比print快,並且使用echo的多重引數 譯註 指用逗號而不是句點 代替字串連線,比如echo str1,str2。4 在執行for迴圈之前確定...
Hibernate 小知識點
今天比較忙沒怎麼寫 知識一些曉得知識或是經驗吧!1.lazy延遲載入 也可以說是需要的時候再區載入 場景 乙個類如person和address,person可以通過getaddress 來得到address的set集合.有乙個dao控制類operation.方法public person query...