PHPでグローバルクラスへアクセスする方法|名前空間とバックスラッシュの基本
はじめに
PHPのパーサーは、クラス名や関数名のように名前空間で修飾されていない識別子 encountered すると、現在の名前空間内でその識別子を解決します。そのため、PHPにあらかじめ用意されている組み込みクラスにアクセスしたい場合は、先頭にバックスラッシュ(\)を付けた完全修飾名で参照する必要があります。
組み込みクラスを使う
次の例では、新しく定義したクラスが、PHPの定義済みクラス stdClass を基底クラスとして継承しています。これがグローバル名前空間のクラスであることを明示するため、先頭にバックスラッシュ(\)を付けて参照しています。
サンプルコード
<?php
namespace testspace;
class testclass extends \stdClass{
//
}
$obj = new testclass();
$obj->name = "Raju";
echo $obj->name;
?>インクルードファイルとグローバル名前空間
include や require で読み込まれたファイルは、デフォルトでグローバル名前空間に属します。したがって、インクルードしたファイル内で定義されているクラスを、別の名前空間から参照する場合にも、バックスラッシュ(\)を先頭に付ける必要があります。
まず、グローバル名前空間でクラスを定義したファイルを用意します。
例:test1.php
#test1.php
<?php
class myclass{
function hello(){ echo "Hello World\n"; }
}
?>このファイルを別の名前空間を持つスクリプトから読み込み、\myclass として参照してみましょう。
例:test2.php
#test2.php
<?php
include 'test1.php';
class testclass extends \myclass{
function hello(){
echo "Hello PHP\n";
}
}
$obj1 = new \myclass();
$obj1->hello();
$obj2 = new testclass();
$obj2->hello();
?>実行結果
このスクリプトを実行すると、次の出力が得られます。
Hello World Hello PHP
まとめ
PHPの名前空間を利用する際は、修飾されていない識別子がすべて現在の名前空間で解決される点に注意が必要です。組み込みクラスやインクルードファイル内のクラスなど、グローバル名前空間のクラスにアクセスするときは、必ずバックスラッシュ(\)を付けた完全修飾名を使いましょう。このルールを理解しておくと、名前空間を活用した大規模なプロジェクトでもクラスの衝突を避け、安全にコードを整理できます。
-
PHPのget_class_methods()関数とは?使い方をわかりやすく解説
get_class_methods()関数の概要PHPのget_class_methods()関数は、指定したクラスに定義されているメソッド名の一覧を取得するための関数です。引数に渡されたクラス(name_of_class)に定義されたすべてのメソッド名を配列として返し、エラーが発生した場合はNULLを返します。構文get_class_methods(class)パラメータname_of_class − メソッド名を取得したいクラス名を文字列またはオブジェクトで指定します。必須パラメータです。戻り値get_class_methods()関数は、name_of_c
-
PHPのclass_exists()関数とは?使い方とサンプルコードをわかりやすく解説
概要PHPのclass_exists()関数は、指定したクラスがすでに定義されているかどうかをチェックするための関数です。クラスが定義済みであればTRUEを、未定義であればFALSEを返します。プラグインの読み込みや条件分岐によるクラスの動的な利用など、柔軟なプログラミングに役立ちます。構文class_exists(class, autoload)パラメータclass − 存在を確認したいクラスの名前。autoload − デフォルトでオートロード機構(__autoload / spl_autoload_call)を呼び出すかどうか。省略した場合のデフォルト値はTRUE