我创建了一个主题类。我想通过addCss方法向html头添加一个css文件,并使用displayCss方法显示。
在我的主题类中,我创建了displayCss()
方法来显示addCss()
方法的css代码,并使用addCss来包含css文件。见head.phtml和index.php
问题是它没有在head.phtml中显示css代码
另一个问题是我在index.php中调用了Template类,为什么我必须在head.phtml中再次调用它。如果我没有在head.phtml中调用它,我会收到此错误
> Undefined variable: theme in head.phtml
感谢。
Class Template {
public function __construct ( $template_dir = null, $css_dir = null, $js_dir = null ) {
if ( $template_dir !== null )
$this->template_dir = $template_dir;
if ( $css_dir !== null )
$this->css_dir = $css_dir;
if ( $js_dir !== null )
$this->js_dir = $js_dir;
}
public function render ( $template_file ) {
if ( file_exists ( $this->template_dir.$template_file ) ){
include $this->template_dir.$template_file;
} else {
throw new Exception ( 'template dosyalari eksik ' . $this->template_dir . $template_file );
}
}
public function displayCss () {
echo $this->CSS;
}
public function htmlHead () {
self::render('head.phtml');
}
public function addCss( $css_file )
{
if ( preg_match('/http/i', $css_file ) ) {
$this->CSS = sprintf( '<link rel="stylesheet" href="%s">', $css_file );
}else{
if ( file_exists ( $this->css_dir.$css_file ) ) {
$this->CSS = sprintf( '<link rel="stylesheet" href="%s">', $this->css_dir . $css_file );
} else {
$this->CSS = "css dosyasina ulasilamiyor";
}
}
return $this->CSS;
}
}
head.phtml
<?php $theme = new Template(); ?>
<html>
<title>Page</title>
<?php $theme->displayCss(); ?>
的index.php
<?php
require_once 'template.class.php';
$theme = new Template();
$theme->addCss('style.css');
$theme->htmlHead();
答案 0 :(得分:0)
仅对类和对象的区别进行澄清。使用self :: something我们在类定义中调用静态函数。 当我们从类定义中调用对象函数或属性时,我们使用$ this关键字。函数htmlHead()必须是:
public function htmlHead () {
$this->render('head.phtml');
}
根据以上所述,head.phtml必须是:
<html>
<title>Page</title>
<?php $this->displayCss(); ?>
因为你在类定义中包含head.phtml,所以当你调用
时
$主题 - &GT; htmlHead();
而且您不需要创建新的Template对象。