php教程函數-系統函數 遞迴函式 重用函數 建構函式使用
<?php
/*
* 1.內建函式:PHP可以在函數內部再聲明函數
* 目的就是在函數內部調用
* 用來協助外部函數完成一些子功能
*
* 2.遞迴函式:在自己內部調用自己的函數名
*
* 3.重用函數
*
* require:用於靜態包含
* include:用於動態包含
* require_once:用於靜態包含,只包含一次
* include_once:用於動態包含,只包含一次
*
* 4.一些系統函數的使用
* 資源=opendir("目錄名")
* readdir(資源)
*
*
*/
//內建函式
function score($php,$java,$dotnet)
{
function php($php)
{
if($php>60)
return "及格";
else
return "不及格";
}
function java($java)
{
if($java>60)
return "及格";
else
return "不及格";
}
function dotnet($dotnet)
{
if($dotnet>60)
return "及格";
else
return "不及格";
}
$total=$php+$java+$dotnet;
$agv=$total/3;
echo "你的php成績是{$php}分,".php($php)."<br>";
echo "你的java成績是{$java}分,".java($java)."<br>";
echo "你的dotnet成績是{$dotnet}分,".dotnet($dotnet)."<br>";
echo "你的總分是:{$total}<br>";
echo "你的平均分是:{$agv}<br>";
}
score(50,90,70);
//遞迴函式
function demo($num)
{
echo $num."<br>";
if($num>0)
demo($num-1);
else
echo "--------------------------------<br>";
echo $num."<br>";
}
demo(10);
function total($dirname,&$dirnum,&$filename)
{
$dir=opendir($dirname);
readdir($dir)."<br>";
readdir($dir)."<br>";
while($filename=readdir($dir))
{
$newfile=$dirname."/".$filename;
echo $filename."<br>";
if(is_dir($filename
}
}
$dirnum=0;
$filenum=0;
total("c:/windows",$dirnum,$filenum);
echo "目錄總數:".$dirnum."<br>";
echo "檔案總數:".$filenum."<br>";
?>
建構函式和解構函式
建構函式
void __construct ([ mixed $args [, $... ]] )
PHP 5 允行開發人員在一個類中定義一個方法作為建構函式。具有建構函式的類會在每次建立對象時先調用此方法,所以非常適合在使用對象之前做一些初始化工作。
Note: 如果子類中定義了建構函式則不會暗中調用其父類的建構函式。要執行父類的建構函式,需要在子類的建構函式中調用 parent::__construct()。
Example #1 使用新標準的建構函式
<?php
class BaseClass {
function __construct() {
print "In BaseClass constructorn";
}
}
class SubClass extends BaseClass {
function __construct() {
parent::__construct();
print "In SubClass constructorn";
}
}
$obj = new BaseClass();
$obj = new SubClass();
?>
為了實現向後相容性,如果 PHP 5 在類中找不到 __construct() 函數,它就會嘗試尋找舊式的建構函式,也就是和類同名的函數。因此唯一會產生相容性問題的情況是:類中已有一個名為 __construct() 的方法,但它卻又不是建構函式。
解構函式
void __destruct ( void )
PHP 5 引入了解構函式的概念,這類似於其它物件導向的語言,如 C++。解構函式會在到某個對象的所有引用都被刪除或者當對象被顯式銷毀時執行。
Example #2 解構函式樣本
<?php
class MyDestructableClass {
function __construct() {
print "In constructorn";
$this->name = "MyDestructableClass";
}
function __destruct() {
print "Destroying " . $this->name . "n";
}
}
$obj = new MyDestructableClass();
?>
和建構函式一樣,父類的解構函式不會被引擎暗中調用。要執行父類的解構函式,必須在子類的解構函式體中顯式調用 parent::__destruct()。
Note:
解構函式在指令碼關閉時調用,此時所有的頭資訊已經發出。
Note:
試圖在解構函式中拋出一個異常會導致致命錯誤。
<?php
class Foobar {
public $baz;
function __destruct() {
# Don't do either of these, if $baz also has a __destruct()!
$this->baz = null;
unset($this->baz);
# Instead, don't clear it at all, or do this:
$this->baz->__destruct();
}
}
?>
If you made this mistake, this might happen in php<5.3.6:
<?php
# Some function that throws an exception
function fail($foobar) {
throw new Exception("Exception A!");
}
$foobar = new Foobar();
$foobar->baz = new Foobar();
try {
fail($foobar); // Send foobar to func that throws an Exception
} catch( Exception $e ) {
print $e->getMessage(); // Exception A will be caught and printed, as expected.
}
$foobar = null; // clearing foobar, and its property $baz
try {
print 'Exception B:';// this will be printed
// output stops教程 here.
throw new Exception("Exception B!");
} catch( Exception $e ) {
print $e->getMessage(); // doesn't happen
}
print 'End'; // this won't be printed
?>