PHPのclass_exists()は呼び出しファイルで当該クラスが存在すると呼び出し順序にかかわらずtrueになる
class_exists()の基本
class_exists()でクラスの存在チェックをしたいとき、次のようなコードを書くとします(すべて同一階層に存在するとする)
code:Demo.php
<?php
class Demo {}
code:test.php
<?php
if (class_exists('Demo')) {
var_dump("Our class!");
} else {
var_dump("Class does not exist");
}
require_once "Demo.php";
if (class_exists('Demo')) {
var_dump("Our class!");
} else {
var_dump("Class does not exist");
}
実行結果
code:zsh
php test.php
string(20) "Class does not exist"
string(10) "Our class!"
require_onceによってDemoクラスが読まれる前まではclass_exists('Demo')はfalseですが、その後はtrueになります
直感的な挙動と思います
クイズ:これの出力はなんでしょう
code:Demo.php
if (class_exists('Demo')) {
$demo = new Demo();
echo "Our class!";
} else {
echo "Class does not exist";
}
class Demo {
}
実行結果
"Our Class!"
なぜ?
実験
code:Check.php
<?php
if (class_exists('Demo')) {
var_dump("Our class!");
} else {
var_dump("Class does not exist");
}
code:test2.php
<?php
require "Check.php";
require_once "Demo.php";
require "Check.php";
実行結果
code:_
php test.php
string(20) "Class does not exist"
string(10) "Our class!"
#PHPの文法