日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

thinkphp自定义标签库

發布時間:2024/4/13 php 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 thinkphp自定义标签库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

thinkphp ~ php中 的類, 的成員變量, 本身是沒有類型說明的, 那么我怎么知道它的類型呢? 或初始值呢?
通常在類定義中, 如果能給一個初始值的(對于已知簡單類型的),最好給一個初始值, 以說明其初始值或類型(盡管類型是可以改變的,但是不會去做自己整自己的傻事), 如果成員是類實例,則不說;
然后要在 $__construct中去初始化成員, 或初始化 對象成員.

namespace Think\Template; class TagLib{ protected $tagLib = ''; protected $tags = array();protected $tpl; // 這個是標簽庫的一個成員, 它是一個模板對象,但是你無法聲明其類型, 要在__construct構造函數中去初始化它public function __construct(){ ....$this->tpl = \Think\Think::instance('Think\\Template'); }}

對于tp框架的類庫 內部的操作, 好像 根路徑是從 ThinkPHP/Library 為根開始的, 即?就表示 ThinkPHP/Library, 而項目模塊中,自定義的類的 路徑好像是從 Home開始的

其實自定義標簽很有用, 以前老是想在前臺html頁面中實現某些功能, 都沒有做到,比如 要連續地輸入多個空格,..., 因為其中要牽涉到使用php的后臺代碼,現在有了自定義標簽庫,就可以用html的標簽去調用用php實現 的代碼功能了.

php在定義類的時候, 跟C++有點區別, c++中定義類,要在定義的后面加上分號;, 類定義作為是作為一個語句的, 而php類的定義, 最后面可以不加分號;

public, protected, private等access level只是針對 "類的" 成員, 成員變量和成員函數才用這個, 對函數內部的變量是不用這個的.

不要重復的 反復的犯一個低級錯誤了: 如果是tp中的類 *.class.php 文件,一定要在文件的開頭 寫上 <?php ... 否則系統不會認為這是 一個php文件, 因此不會認為其中的class...是一個類,所以會報錯: 實例化一個不存在 的類. 在windows下的編輯器還不會顯示代碼顏色高亮, 但是在shell中你就不容易發現了,所以一定要記得寫php標簽. 這個跟c++文件不一樣:c++文件是不需要開始標簽的, 可以直接寫code.. . 所以要注意他們的區別!

php的結束標簽 在手冊中,是強烈建議不要加的: 因為結束標簽 后的任何空格都可能引起很蛋疼 的錯誤. 如果是要被別人包含的時候,只是在結束時加上結束注釋.


要解決路徑問題, 最簡單的方法是把 自定義標簽庫放到 跟 內置標簽庫 Cx.class.php一樣的位置. 然后只配置兩個配置項: 'TAGLIB_PRE_LOAD' => 'my' 'TAGLIB_BUILT_IN' => 'cx,my'

而'APP_AUTOLOAD_PATH' => ''.在3.2.3中已經被廢棄,因為它要關閉namespace, 'APP_USE_NAMESPACE' => false, 但是一旦關閉,所有點控制器都會失效!

而且 My.class.php 自定義標簽庫好像也不用命名為 TagLibMy.class.php.?!


最終總結: 解決方案

  • 自定義標簽庫的放置的位置不是嚴格指定的, 通常放在 Home\TagLib?目錄中
  • 標簽庫文件的名字,不要參考手冊, 直接寫就是了, 如 My.class.php文件中:
    (當然你也可以寫TagLibMy.class.php, 類也定義成TagLibMy,以及配置文件做相應修改都是可以的, 只是沒有必要搞得那么復雜)
  • <?php namespace Home\TagLib; use Think\Template\TagLib;class My extends TagLib {protected $tags = array('nspace' => array('attr'=>'num', 'close'=>0), // 'close'=>0 表示閉合,表示像<input .../> <br>這樣的標簽.// 后面還可以定義其他標簽);public function _nspace($tag, $content){ // 目的是要把標簽解析成為一個php字符串.$num = $tag['num'];$parseStr = '<?php for($i=0;$i<'.$num.';$i++): ?>'; // 表示php代碼中的左邊大括號, 要用冒號. $parseStr .= "&nbsp;"; // 循環體中的部分, 要在前面的 上一語句中, 把php標簽結束. 而且要用雙引號,才能解析 &..; $parseStr .= '<?php endfor; ?>'; // 要表示循環的結束,的 右大括號, 要單獨用php標簽,使用endfor; endif;等return $parseStr; // $content表示 非閉合標簽的中間的內容, 如volist標簽中 包含的內容{$id['name']{$id['score']等等// 有必要的時候, 需要調用 標簽庫的tpl去解析: $parseStr .= $this->tpl->parse($content);}}3. 當前模塊的配置文件中,配置上 預加載和內置標簽<?php return array('TAGLIB_BUILD_IN' => 'cx,Home\TagLib\my', // 非常注意, 這里是 build 不是built!!'TAGLIB_PRE_LOAD'=>'Home\TagLib\My', );'TAGLIB_PRE_LOAD'=>'Home\TagLib\My',最后的標簽庫名字嚴格區分大小寫! 而內置標簽庫的名字則不區分大小寫 'TAGLIB_BUILT_IN' => 'Cx,Home\TagLib\my',使用自定義標簽庫 abc<nspace num="10" />abc, 則是連續生成num個空格

    轉載于:https://www.cnblogs.com/bkylee/p/6096873.html

    總結

    以上是生活随笔為你收集整理的thinkphp自定义标签库的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。