我有一个静态3: 5
26: 4
22: 4
16: 3
20: 3
11: 2
1: 2
7: 1
类,它从另一个类传递一个字符串。当字符串作为变量传递时,它可以工作。当我将其更改为常量时,错误为:
[2016年2月17日19:08:48欧洲/柏林] PHP警告:include():失败 开盘 ' /应用程序/ MAMP / htdocs中/ its_vegan /脚本/ back_end /视图/模板' 包括在内 (include_path ='。:/ Applications / MAMP / bin / php / php7.0.0 / lib / php')in /Applications/MAMP/htdocs/its_vegan/scripts/back_end/views/view.php on 第23行
View
在CountrySelect中做了什么工作:
class View {
/**
* -------------------------------------
* Render a Template.
* -------------------------------------
*
* @param $filePath - include path to the template.
* @param null $viewData - any data to be used within the template.
* @return string -
*
*/
public static function render( $filePath, $viewData = null ) {
// Was any data sent through?
( $viewData ) ? extract( $viewData ) : null;
ob_start();
include ( $filePath );// error on this line
$template = ob_get_contents();
ob_end_clean();
return $template;
}
}
class CountrySelect {
const template = 'select_template.php'; //the const is template
public static function display() {
if ( class_exists( 'View' ) ) {
// Get the full path to the template file.
$templatePath = dirname( __FILE__ ) . '/' . template; //the const is template
$viewData = array(
"options" => '_countries',
"optionsText" => 'name',
"optionsValue" => 'geonameId',
"value" => 'selectedCountry',
"caption" => 'Country'
);
// Return the rendered HTML
return View::render( $templatePath, $viewData );
}
else {
return "You are trying to render a template, but we can't find the View Class";
}
}
}
为什么模板必须是静态的?我可以把它变成静态常数吗?
答案 0 :(得分:3)
您也可以使用self::template
由于类常量是按类级而不是每个对象定义的,因此static::template
将引用相同的内容,除非您有子类。 (见https://secure.php.net/manual/en/language.oop5.late-static-bindings.php)
template
指的是全局常量(例如define('template', 'value');
)
答案 1 :(得分:2)
在这一行
$templatePath = dirname( __FILE__ ) . '/' . template;
template
不是常数,因为在类中声明了常量template
。此代码的工作原理类似
$templatePath = dirname( __FILE__ ) . '/template';
所以,请使用static::template