phpチュートリアル関数 - システム関数、再帰関数、再利用関数、コンストラクターの使用法
/*
※1. 内部関数:PHPは関数内で関数を宣言できます
※関数内で呼び出すことが目的です
* 外部関数がいくつかのサブ関数を完了するのを助けるために使用されます
*
* 2. 再帰関数: 自分の中で独自の関数名を呼び出します
*
* 3. 関数の再利用
*
* require: 静的インクルージョンに使用されます
* include: 動的インクルージョンに使用されます
* require_once: 静的包含に使用され、一度だけ含まれます
* include_once: 動的包含に使用され、一度だけ含まれます
*
※4.一部システム機能の利用
* Resource=opendir("ディレクトリ名")
*readdir(リソース)
*
*
*/
//内部関数
関数スコア($php,$java,$dotnet)
{
関数php($php)
{
if($php>60)
「パス」を返します;
それ以外
「失敗」を返します;
}
関数java($java)
{
if($java>60)
「パス」を返します;
それ以外
「失敗」を返します;
}
関数 dotnet($dotnet)
{
if($dotnet>60)
「パス」を返します;
それ以外
「失敗」を返します;
}
$total=$php+$java+$dotnet;
$agv=$total/3;
echo "あなたの php スコアは {$php} ポイントです、".php($php)"
";
echo "あなたの Java スコアは {$java} ポイントです、".java($java)"
";
echo "あなたの dotnet スコアは {$dotnet} ポイントです,".dotnet($dotnet)."
";
echo "あなたの合計スコアは: {$total}
";
echo "あなたの平均スコアは: {$agv}
";
}
スコア(50,90,70);
//再帰関数
関数デモ($num)
{
$num をエコーします。」
";
if($num>0)
デモ($num-1);
それ以外
エコー「--------------------------------
」 ";
$num をエコーします。」
";
}
デモ(10);
関数 total($dirname,&$dirnum,&$filename)
{
$dir=opendir($dirname);
readdir($dir)."
";
readdir($dir)."
";
while($filename=readdir($dir))
{
$newfile=$dirname."/".$filename;
$ファイル名をエコーします。」
";
If(is_dir($ファイル名
}}
$dirnum=0;
$filenum=0;
total("c:/windows",$dirnum,$filenum);
echo "ディレクトリの総数: ".$dirnum."
";
echo "ファイルの総数: ".$filenum."
";
?>
コンストラクターとデストラクター
コンストラクター
void __construct ([ 混合 $args [, $... ]] )
PHP 5 では、開発者がクラス内のコンストラクターとしてメソッドを定義できます。コンストラクターを持つクラスは、オブジェクトが作成されるたびにこのメソッドを呼び出すため、オブジェクトを使用する前に初期化作業を行うのに非常に適しています。
注: コンストラクターがサブクラスで定義されている場合、その親クラスのコンストラクターは暗黙的に呼び出されません。親クラスのコンストラクターを実行するには、子クラスのコンストラクターでparent::__construct()を呼び出す必要があります。
例 #1 新しい標準コンストラクターの使用
クラスBaseClass {
関数 __construct() {
print "BaseClass コンストラクター内";
}
}class SubClass は BaseClass を拡張します {
関数 __construct() {
親::__construct();
print "サブクラスコンストラクター内";
}
}$obj = 新しいBaseClass();
$obj = 新しいサブクラス();
?>
下位互換性のために、PHP 5 がクラス内で __construct() 関数を見つけられない場合、クラスと同じ名前の関数である古いスタイルのコンストラクターを見つけようとします。したがって、互換性の問題が発生する唯一の状況は、クラスに __construct() という名前のメソッドがすでに存在するが、それがコンストラクターではない場合です。
デストラクター
void __destruct ( void )
PHP 5 では、C++ などの他のオブジェクト指向言語と同様に、デストラクターの概念が導入されました。デストラクターは、オブジェクトへのすべての参照が削除されるか、オブジェクトが明示的に破棄されるときに実行されます。
例 #2 デストラクターの例
クラスMyDestructableClass {
関数 __construct() {
print "コンストラクター内";
$this->name = "MyDestructableClass";
}関数 __destruct() {
print "" を破棄しています。"n";
}
}$obj = 新しい MyDestructableClass();
?>
コンストラクターと同様、親クラスのデストラクターはエンジンによって暗黙的に呼び出されません。親クラスのデストラクターを実行するには、子クラスのデストラクター本体でparent::__destruct()を明示的に呼び出す必要があります。
注:
デストラクターは、スクリプトが閉じられるとき、つまりすべてのヘッダー情報が送信されたときに呼び出されます。
注:
デストラクターで例外をスローしようとすると、致命的なエラーが発生します。
クラスフーバー{
公開 $baz;
関数 __destruct() {
# $baz にも __destruct() がある場合は、これらのどちらも実行しないでください!
$this->baz = null;
unset($this->baz);
# 代わりに、まったくクリアしないか、次のようにしてください:
$this->baz->__destruct();
}
}
?>この間違いを犯した場合、php
でこれが発生する可能性があります。 # 例外をスローする関数
関数失敗($foobar) {
新しい例外をスローします("例外 A!");
}$foobar = 新しい Foobar();
$foobar->baz = 新しい Foobar();試してください{
$foobar = null // foobar とそのプロパティ $baz
failed($foobar); // 例外をスローする関数に foobar を送信します
} catch(例外 $e) {
Print $e->getMessage(); // 予想通り、例外 A が捕捉されて出力されます。 }
をクリアします。
試してください{Print 'Exception B:';// これが印刷されます
// 出力はここでチュートリアルを終了します。
新しい例外をスローします("例外 B!");
} catch(例外 $e) {
Print $e->getMessage() // は起こりません
}
print 'End' // これは印刷されません
?>