>  기사  >  백엔드 개발  >  PHP 프레임워크 - PHP는 자체 템플릿 엔진을 작성하려고 시도했습니다. 최종 표시 방법은 실제로 html 파일을 요구하는 것입니다.

PHP 프레임워크 - PHP는 자체 템플릿 엔진을 작성하려고 시도했습니다. 최종 표시 방법은 실제로 html 파일을 요구하는 것입니다.

WBOY
WBOY원래의
2016-08-30 09:36:461121검색

PHP에서 텍스트를 발견하면 함수 출력이 필요합니까?
제가 작성한 템플릿 클래스는 다음과 같습니다.
<?php

/**
 * User: 火蜥蜴制作
 */

namespace Core;

// 模板类
class Template
{
    private $data = [];
    private $path = ''; // 模板路径

    public function __construct() {
        $this->path = Config::get('project.template_path');
    }

    /**
     * 模板赋值
     * @param $key
     * @param $value
     */
    public function assign($key, $value) {
        if(is_array($key)) {
            $this->data = array_merge($this->data, $key);
        } else {
            $this->data[$key] = $value;
        }
    }

    /**
     * 获取路径
     * @param $file
     */
    private function getFilePath($file) {
        $params = explode('.', $file);
        // 模板路径已经加了分隔符
        $path = ROOT . DIRECTORY_SEPARATOR . $this->path;
        foreach ($params as $key => $param) {
            if($key == count($params) - 1) {
                $path .= $param;
            } else {
                $path .= $param . DIRECTORY_SEPARATOR;
            }
        }
        return $path . '.html';
    }


    public function display($file) {
        if(empty($file)) {
            throw new \Exception("Template Can Not Be Empty");
        }
        $realPath = $this->getFilePath($file);
        if(is_file($realPath)) {
            extract($this->data);
            require($realPath);
        } else {
            throw new \Exception("Template:<code>{$realPath} Not Found");
        }
    }
}

                            
                        

답글 내용:

PHP에서 텍스트를 발견하면 함수 출력이 필요합니까?
제가 작성한 템플릿 클래스는 다음과 같습니다.
<?php

/**
 * User: 火蜥蜴制作
 */

namespace Core;

// 模板类
class Template
{
    private $data = [];
    private $path = ''; // 模板路径

    public function __construct() {
        $this->path = Config::get('project.template_path');
    }

    /**
     * 模板赋值
     * @param $key
     * @param $value
     */
    public function assign($key, $value) {
        if(is_array($key)) {
            $this->data = array_merge($this->data, $key);
        } else {
            $this->data[$key] = $value;
        }
    }

    /**
     * 获取路径
     * @param $file
     */
    private function getFilePath($file) {
        $params = explode('.', $file);
        // 模板路径已经加了分隔符
        $path = ROOT . DIRECTORY_SEPARATOR . $this->path;
        foreach ($params as $key => $param) {
            if($key == count($params) - 1) {
                $path .= $param;
            } else {
                $path .= $param . DIRECTORY_SEPARATOR;
            }
        }
        return $path . '.html';
    }


    public function display($file) {
        if(empty($file)) {
            throw new \Exception("Template Can Not Be Empty");
        }
        $realPath = $this->getFilePath($file);
        if(is_file($realPath)) {
            extract($this->data);
            require($realPath);
        } else {
            throw new \Exception("Template:<code>{$realPath} Not Found");
        }
    }
}

                            
                        
            

  1. require은 함수가 아닙니다

  2. require의 기능은 파일 이름으로 다음 문자열을 사용하는 것입니다. 파일 확장자가 .php인지 여부에 관계없이 해당 파일은 PHP 프로그램으로 간주되어 현재 프로그램에 도입됩니다. 달리다.

  3. php 프로그램이 <?php, ?>으로 래핑되지 않으면 바로 출력됩니다.

require은 접미사가 무엇이든 관계없이 참조된 파일을 PHP 파일로 실행합니다(접미사는 허용되지 않음). 일부 PHP 트로이 목마는 방화벽을 우회하기 위해 이를 사용합니다.
<?php ?> 사이에 PHP 코드를 넣어야 실행됩니다.

게 악마.

파일이 포함되면 파서는 PHP 모드를 종료하고 대상 파일의 시작 부분에서 HTML 모드로 들어갔다가 파일 끝에서 다시 시작됩니다. 이러한 이유로 PHP 코드로 실행되어야 하는 객체 파일의 모든 코드는 유효한 PHP 시작 및 종료 태그 내에 포함되어야 합니다.

include 또는 requrie이 파일인 경우, 파일에서 php 시작 태그와 종료 태그 <?php ?>가 없는 위치는 html로 파싱됩니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.