如何在类

时间:2015-04-25 15:49:24

标签: php oop

我创建了一个主题类。我想通过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();

1 个答案:

答案 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对象。