tp5原始碼分析之模板標籤庫

2021-08-15 18:00:51 字數 2012 閱讀 8160

標籤庫,可以用來自定義模板檔案中的標籤解析方式

在tp5中自定義了內建標籤庫(cx.php)

標籤庫建構函式,建立標籤庫物件

public

function

__construct

($template)

標籤庫可以用來解析模板檔案中的自定義標籤

public

function

parsetag

(&$content, $lib = '')}}

// 閉合標籤

if (!empty($tags[1]))

} else

}unset($right, $matches);

// 按標籤在模板中的位置從後向前排序

krsort($nodes);

}$break = '';

if ($nodes) else

}// 替換標籤尾部

$content = substr_replace($content, $replace[1], $node['end'][1], strlen($node['end'][0]));

// 把標籤頭壓入棧

$beginarray = ['pos' => $node['begin'][1], 'len' => strlen($node['begin'][0]), 'str' => $replace[0]];}}

while ($beginarray) }}

// 自閉合標籤

if (!empty($tags[0])) , $content);

}return;

}

標籤的正規表示式

private

function

getregex

($tags, $close)

else

} else else

}return

'/' . $regex . '/is';

}

使用正規表示式分析標籤屬性

public

function

parseattr

($str, $name, $alias = '')

if (!isset($this->tags[$name])) }}

} else

}if (!empty($tag['must'])) }}

} else

$result['expression'] = substr($str, $_taglibs[$name][0], -$_taglibs[$name][1]);

// 清除自閉合標籤尾部/

$result['expression'] = rtrim($result['expression'], '/');

$result['expression'] = trim($result['expression']);

} elseif (empty($this->tags[$name]) || !empty($this->tags[$name]['attr']))

}return $result;

}

獲取標籤定義

public

function

gettags

()

tp5在\template\tablig\cx.php中,定義了內建標籤的解析方式

每個標籤的解析實現為相應標籤的tagxx()方法

自學TP5原始碼(一)

感覺在中國 thinkphp 在 php 框架中還是占有主導地位的。所以想透徹的理解一下這個聽說簡單易學的框架。1.入口檔案 定義應用目錄 載入框架引導檔案 require dir thinkphp start.php 複製 2.引導檔案namespace think thinkphp 引導檔案 1...

tp5原始碼學習 容器類

1.index.php呼叫 容器獲取例項,執行例項的方法2.container get public static function get abstract,vars newinstance false 3.static getinstance 單例模式 public static functio...

TP5原始碼分析前置知識 簡單工廠模式

一 白話解釋一下 所謂工廠就是為不同客戶生產不同的玩意,那麼程式裡面的工廠有著異曲同工之妙,例如你要new 車相關的類 是不是每種車要自己去new?現在我換種做法,我們把new的過程交給工廠去幹,我只要告訴你型別,你就給我new什麼。二 看看最簡單的工廠democlass carclass bike...