我已经通过 Composer 在我的 Linux Web 服务器上安装了 smarty,但是当我运行我的 php 测试脚本时,我得到:
致命错误:未捕获错误:在 /var/www/html/smarty_test.php 中找不到类“Smarty”:5 堆栈跟踪:#0 {main} 在第 5 行 /var/www/html/smarty_test.php 中抛出
Composer 将 Smarty.class.php 放在 /var/www/html/vendor/smarty/smarty/libs/ 中,我的 composer.json 是在 /var/www/html 中创建的,这也是其中的位置我的剧本是。
smarty_test.php
<?php
require_once 'vendor/autoload.php';
$smarty = new Smarty();
echo "Hello world";
echo "Smarty version: " . Smarty::SMARTY_VERSION;
?>
composer.json
{
"require": {
"smarty/smarty": "^5.4"
}
}
Smarty.class.php
<?php
define('__SMARTY_DIR', __DIR__ . '/../src/');
// Global function declarations
require_once(__SMARTY_DIR . "/functions.php");
spl_autoload_register(function ($class) {
// Class prefix
$prefix = 'Smarty\\';
// Does the class use the namespace prefix?
$len = strlen($prefix);
if (strncmp($prefix, $class, $len) !== 0) {
// If not, move to the next registered autoloader
return;
}
// Hack off the prefix part
$relative_class = substr($class, $len);
// Build a path to the include file
$file = __SMARTY_DIR . str_replace('\\', '/', $relative_class) . '.php';
// If the file exists, require it
if (file_exists($file)) {
require_once($file);
}
});
正如亚历克斯已经评论过的那样, 您需要明确指定要实例化的类:
像这样:new \Smarty\Smarty()
<?php
require_once 'vendor/autoload.php';
$smarty = new \Smarty\Smarty();
echo "Hello world";
echo "Smarty version: " . Smarty::SMARTY_VERSION;
或者像这样:
<?php
use \Smarty\Smarty;
require_once 'vendor/autoload.php';
$smarty = new Smarty();
echo "Hello world";
echo "Smarty version: " . Smarty::SMARTY_VERSION;