これはしばらくの間私を悩ませてきましたが、私はそれを理解できないようです.
私の phpinfo は、PDO がインストールされていることを報告し、index.php ファイルでデータベースに接続できます。しかし、名前空間を持つクラスで PDO 接続を開こうとすると、php は autoload 関数を使用して PDO.php を見つけようとしますが、これは機能しません。
私のクラスは次のとおりです。
abstract class {
protected $DB;
public function __construct()
{
try {
$this->DB = new PDO("mysql:host=$host;port=$port;dbname=$dbname", $user, $pass);
}
catch(PDOException $e) {
echo $e->getMessage();
}
}
}
そして、エラーは
Warning: require_once((...)/Model/PDO.php): failed to open stream: No such file or directory in /(...)/Autoloader.php
Fatal error: require_once(): Failed opening required 'vendor/Model/PDO.php' (include_path='.:/Applications/MAMP/bin/php/php5.4.4/lib/php') in /(...)/Autoloader.php
私が知る限り、PHP PDO拡張機能がインストールされているため、オートローダーを呼び出す必要があります(はい、完全に確信しています)。
私のオートロードは次のとおりです。
spl_autoload_register('apiv2Autoload');
/**
* Autoloader
*
* @param string $classname name of class to load
*
* @return boolean
*/
function apiv2Autoload($classname)
{
if (false !== strpos($classname, '.')) {
// this was a filename, don't bother
exit;
}
if (preg_match('/[a-zA-Z]+Controller$/', $classname)) {
include __DIR__ . '/../controllers/' . $classname . '.php';
return true;
} elseif (preg_match('/[a-zA-Z]+Mapper$/', $classname)) {
include __DIR__ . '/../models/' . $classname . '.php';
return true;
} elseif (preg_match('/[a-zA-Z]+Model$/', $classname)) {
include __DIR__ . '/../models/' . $classname . '.php';
return true;
} elseif (preg_match('/[a-zA-Z]+View$/', $classname)) {
include __DIR__ . '/../views/' . $classname . '.php';
return true;
}
}
何か助けてください。