php广告加载类用法实例

本文实例讲述了php广告加载类的用法,非常实用。分享给大家供大家参考。具体方法如下:

该php广告加载类,支持异步与同步加载。需要使用Jquery实现。

ADLoader.class.php类文件如下:

<?php
/** 广告加载管理类
*  Date:  2013-08-04
*  Author: fdipzone
*  Ver:  1.0
*
*  Func:
*  public load     加载广告集合
*  public setConfig  广告配置
*  private getAds    根据channel创建广告集合
*  private genZoneId  zoneid base64_encode 处理
*  private genHtml   生成广告html
*  private checkBrowser 检查是否需要同步加载的浏览器
*/ 

class ADLoader{ // class start 

  private static $_ads = array();   // 广告集合
  private static $_step = 300;    // 广告加载间隔
  private static $_async = true;   // 是否异步加载
  private static $_config = array(); // 广告设置文件
  private static $_jsclass = null;  // 广告JS class 

  /** 加载广告集合
  * @param String $channel 栏目,对应config文件
  * @param int   $step  广告加载间隔
  * @param boolean $async  是否异步加载
  */
  public static function load($channel='', $step='', $async=''){
    if(isset($step) && is_numeric($step) && $step>0){
      self::$_step = $step;
    } 

    if(isset($async) && is_bool($async)){
      self::$_async = $async;
    } 

    // 判断浏览器,如IE强制使用同步加载
    if(!self::checkBrowser()){
      self::$_async = false;
    } 

    self::getAds($channel);
    self::genZoneId(); 

    return self::genHtml();
  } 

  /** 设置config
  * @param String $config 广告配置
  * @param String $jsclass js class文件路径
  */
  public static function setConfig($config=array(), $jsclass=''){
    self::$_config = $config;
    self::$_jsclass = $jsclass;
  } 

  /** 根据channel创建广告集合
  * @param String $channel 栏目
  */
  private static function getAds($channel=''){
    $AD_Config = self::$_config;
    if($AD_Config!=null){
      self::$_ads = isset($AD_Config[$channel])? $AD_Config[$channel] : $AD_Config['default'];
    }
  } 

  /** zoneid base64_encode 处理 */
  private static function genZoneId(){ 

    // 同步加载广告不需要处理zoneid
    if(!self::$_async){
      return ;
    } 

    $ads = self::$_ads;
    for($i=0,$len=count($ads); $i<$len; $i++){
      if(isset($ads[$i]['zoneId'])){
        $ads[$i]['zoneId'] = base64_encode('var zoneid='.$ads[$i]['zoneId'].';');
      }
    }
    self::$_ads = $ads;
  } 

  /** 生成广告html */
  private static function genHtml(){
    $ads = self::$_ads;
    $html = array();
    if(self::$_jsclass!=null && $ads){
      array_push($html, '<script type="text/javascript" src="'.self::$_jsclass.'"></script>'); 

      // 同步需要预先加载
      if(!self::$_async){
        foreach($ads as $ad){
          array_push($html, '<div id="'.$ad['domId'].'_container" style="display:none">');
          array_push($html, '<script type="text/javascript">');
          array_push($html, 'ADLoader.preload('.json_encode($ad).');');
          array_push($html, '</script>');
          array_push($html, '</div>');
        }
      } 

      array_push($html, '<script type="text/javascript">');
      array_push($html, 'var ads='.json_encode($ads).';');
      array_push($html, '$(document).ready(function(){ ADLoader.load(ads, '.self::$_step.', '.intval(self::$_async).'); });');
      array_push($html, '</script>');
    }
    return implode("\r\n", $html);
  } 

  /** 判断是否需要强制同步加载的浏览器 */
  private static function checkBrowser(){
    $user_agent = $_SERVER['HTTP_USER_AGENT'];
    if(strstr($user_agent,'MSIE')!=''){
      return false;
    }
    return true;
  } 

} // class end
?>

ADConfig.php文件如下:

<?php
/** 广告配置文件 **/ 

return array( 

  'case_openx' => array(
    array(
      'type' => 'openx',
      'domId' => 'ad_728x90',
      'zoneId' => 452
    ),
    array(
      'type' => 'openx',
      'domId' => 'ad_300x250',
      'zoneId' => 449
    ),
    array(
      'type' => 'openx',
      'domId' => 'ad_l2_300x250',
      'zoneId' => 394
    ),
  ), 

  'case_url' => array(
    array(
      'type' => 'url',
      'domId' => 'ad_728x90',
      'url' => 'adurl.php?zoneid=452'
    ),
    array(
      'type' => 'url',
      'domId' => 'ad_300x250',
      'url' => 'adurl.php?zoneid=449'
    ),
    array(
      'type' => 'url',
      'domId' => 'ad_l2_300x250',
      'url' => 'adurl.php?zoneid=394'
    )
  ), 

  'case_sync_openx' => array(
    array(
      'type' => 'openx',
      'domId' => 'ad_728x90',
      'zoneId' => 452
    ),
    array(
      'type' => 'openx',
      'domId' => 'ad_300x250',
      'zoneId' => 449
    ),
    array(
      'type' => 'openx',
      'domId' => 'ad_l2_300x250',
      'zoneId' => 394
    ),
  ), 

  'default' => array(
    array(
      'type' => 'openx',
      'domId' => 'ad_728x90',
      'zoneId' => 452
    ),
    array(
      'type' => 'openx',
      'domId' => 'ad_300x250',
      'zoneId' => 449
    ),
    array(
      'type' => 'openx',
      'domId' => 'ad_l2_300x250',
      'zoneId' => 394
    ),
  ), 

); 

?>

ADLoader.js文件如下:

/** 异步加载广告
*  Date:  2013-08-04
*  Author: fdipzone
*  Ver:  1.0
*/
var ADLoader = (function(){ 

  var _ads = [],   // 广告集合
    _step = 300,  // 广告加载间隔
    _async = true, // 是否异步加载
    _loaded = 0;  // 已经加载的广告数 

  /** loadAd 循环加载广告
  * @param int c 第几个广告
  */
  function loadAD(c){
    if(_loaded>=_ads.length){
      return ;
    } 

    if($('#'+_ads[c].domId).length>0){ // 判断dom是否存在 

      if(_async){ // 异步执行 

        crapLoader.loadScript(getScript(_ads[c]), _ads[c].domId, {
          success: function(){
            completeAd();
          }
        }); 

      }else{ // 将同步加载的广告显示 

        var ad_container = $('#'+_ads[c].domId+'_container');
        ad_container.find('embed').attr('wmode','transparent').end().find('object').each(function(k, v){
          v.wmode = 'transparent'; // 将flash变透明
        });
        $('#'+_ads[c].domId)[0].appendChild(ad_container[0]);
        ad_container.show(); 

        completeAd();
      }
    }else{ // dom不存在
      completeAd();
    }
  } 

  /** 加载完广告后处理 */
  function completeAd(){
    _loaded ++;
    setTimeout(function(){
      loadAD(_loaded);
    }, _step);
  } 

  /** 获取广告
  * @param Array ad 广告参数
  */
  function getScript(ad){
    var ret = null; 

    switch(ad.type){
      case 'openx': // openx code ad
        ret = 'data:text/javascript;base64,' + ad.zoneId + 'dmFyIG0zX3UgPSAobG9jYXRpb24ucHJvdG9jb2w9PSdodHRwczonPydodHRwczovL2Fkcy5ubWcuY29tLmhrL3d3dy9kZWxpdmVyeS9hanMucGhwJzonaHR0cDovL2Fkcy5ubWcuY29tLmhrL3d3dy9kZWxpdmVyeS9hanMucGhwJyk7CnZhciBtM19yID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjk5OTk5OTk5OTk5KTsKaWYgKCFkb2N1bWVudC5NQVhfdXNlZCkgZG9jdW1lbnQuTUFYX3VzZWQgPSAnLCc7CmRvY3VtZW50LndyaXRlICgiPHNjciIrImlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0nIittM191KTsKZG9jdW1lbnQud3JpdGUgKCI/em9uZWlkPSIgKyB6b25laWQpOwpkb2N1bWVudC53cml0ZSAoJyZhbXA7Y2I9JyArIG0zX3IpOwppZiAoZG9jdW1lbnQuTUFYX3VzZWQgIT0gJywnKSBkb2N1bWVudC53cml0ZSAoIiZhbXA7ZXhjbHVkZT0iICsgZG9jdW1lbnQuTUFYX3VzZWQpOwpkb2N1bWVudC53cml0ZSAoZG9jdW1lbnQuY2hhcnNldCA/ICcmYW1wO2NoYXJzZXQ9Jytkb2N1bWVudC5jaGFyc2V0IDogKGRvY3VtZW50LmNoYXJhY3RlclNldCA/ICcmYW1wO2NoYXJzZXQ9Jytkb2N1bWVudC5jaGFyYWN0ZXJTZXQgOiAnJykpOwpkb2N1bWVudC53cml0ZSAoIiZhbXA7bG9jPSIgKyBlc2NhcGUod2luZG93LmxvY2F0aW9uKSk7CmlmIChkb2N1bWVudC5yZWZlcnJlcikgZG9jdW1lbnQud3JpdGUgKCImYW1wO3JlZmVyZXI9IiArIGVzY2FwZShkb2N1bWVudC5yZWZlcnJlcikpOwppZiAoZG9jdW1lbnQuY29udGV4dCkgZG9jdW1lbnQud3JpdGUgKCImY29udGV4dD0iICsgZXNjYXBlKGRvY3VtZW50LmNvbnRleHQpKTsKaWYgKGRvY3VtZW50Lm1tbV9mbykgZG9jdW1lbnQud3JpdGUgKCImYW1wO21tbV9mbz0xIik7CmRvY3VtZW50LndyaXRlICgiJz48XC9zY3IiKyJpcHQ+Iik7';
        break; 

      case 'url': // url ad
        ret = ad.url;
        break;
    }
    return ret;
  } 

  /** 同步加载广告
  * @param Array ad 广告参数
  */
  function writeAd(ad){
    switch(ad.type){
      case 'openx':
        var m3_u = (location.protocol=='https:'?'https://ads.nmg.com.hk/www/delivery/ajs.php':'http://ads.nmg.com.hk/www/delivery/ajs.php');
        var m3_r = Math.floor(Math.random()*99999999999);
        if (!document.MAX_used) document.MAX_used = ',';
        document.write ("<scr"+"ipt type='text/javascript' src='"+m3_u);
        document.write ("?zoneid=" + ad.zoneId);
        document.write ('&cb=' + m3_r);
        if (document.MAX_used != ',') document.write ("&exclude=" + document.MAX_used);
        document.write (document.charset ? '&charset='+document.charset : (document.characterSet ? '&charset='+document.characterSet : ''));
        document.write ("&loc=" + escape(window.location));
        if (document.referrer) document.write ("&referer=" + escape(document.referrer));
        if (document.context) document.write ("&context=" + escape(document.context));
        if (document.mmm_fo) document.write ("&mmm_fo=1");
        document.write ("'><\/scr"+"ipt>");
        break;
       case 'url':
        document.write ('<script type="text/javascript" src="' + ad.url + '"></script>');
        break;
    }
  } 

  obj = { 

    /** 加载广告
    * @param Array  ads  广告集合
    * @param int   step 广告加载间隔
    * @param boolean async true:异步加载 false:同步加载
    */
    load: function(ads, step, async){
      _ads = ads; 

      if(typeof(step)!='undefined'){
        _step = step;
      } 

      if(typeof(async)!='undefined'){
        _async = async;
      } 

      loadAD(_loaded);
    }, 

    /** 预加载广告 */
    preload: function(ad){
      if($('#'+ad.domId).length>0){  // 判断dom是否存在
        writeAd(ad);
      }
    }
  }
  return obj; 

}()); 

/* crapLoader */
var crapLoader = (function() { 

  var isHijacked = false,
    queue = [],
    inputBuffer = [],
    writeBuffer = {},
    loading = 0,
    elementCache = {},
    returnedElements = [],
    splitScriptsRegex = /(<script[\s\S]*?<\/script>)/gim,
    globalOptions = {
      autoRelease: true,
      parallel: true,
      debug: false
    },
    defaultOptions = {
      charset: undefined,
      success: undefined,
      func: undefined,
      src: undefined,
      timeout: 3000
    },publ,
    head = document.getElementsByTagName("head")[0] || document.documentElement,
    support = {
      scriptOnloadTriggeredAccurately: false,
      splitWithCapturingParentheses: ("abc".split(/(b)/)[1]==="b")
    }; 

  function checkQueue () {
    if(queue.length) {
      loadScript( queue.shift() );
    } else if(loading === 0 && globalOptions.autoRelease) {
      debug("Queue is empty. Auto-releasing.");
      publ.release();
    }
  } 

  function checkWriteBuffer (obj) {
    var buffer = writeBuffer[obj.domId],
      returnedEl; 

    if(buffer && buffer.length) {
      writeHtml( buffer.shift(), obj ); 

    } else {
      while (returnedElements.length > 0) {
        returnedEl = returnedElements.pop();
        var id = returnedEl.id;
        var elInDoc = getElementById(id);
        if (!elInDoc) { continue; }
        var parent = elInDoc.parentNode;
        elInDoc.id = id + "__tmp";
        parent.insertBefore(returnedEl, elInDoc);
        parent.removeChild(elInDoc);
      }
      finished(obj);
    }
  } 

  function debug (message, obj) {
    if(!globalOptions.debug || !window.console) { return; }
    var objExtra = "";
    if(obj) {
      objExtra = "#"+obj.domId+" ";
      var depth = obj.depth;
      while(depth--) { objExtra += "  "; }
    }
    console.log("crapLoader " + objExtra + message);
  } 

  function extend (t, s) {
    var k;
    if(!s) { return t; }
    for(k in s) {
      t[k] = s[k];
    }
    return t;
  } 

  function finished (obj) {
    if(obj.success && typeof obj.success === "function") {
      obj.success.call( document.getElementById(obj.domId) );
    }
    checkQueue();
  } 

  function flush (obj) {
    var domId = obj.domId,
      outputFromScript,
      htmlPartArray; 

    outputFromScript = stripNoScript( inputBuffer.join("") );
    inputBuffer = []; 

    htmlPartArray = separateScriptsFromHtml( outputFromScript ); 

    if(!writeBuffer[domId]) {
      writeBuffer[domId] = htmlPartArray;
    } else {
      Array.prototype.unshift.apply(writeBuffer[domId], htmlPartArray);
    }
    checkWriteBuffer(obj);
  } 

  function getCachedElById (domId) {
    return elementCache[domId] || (elementCache[domId] = document.getElementById(domId));
  } 

  function getElementById (domId) {
    return ( publ.orgGetElementById.call ?
      publ.orgGetElementById.call(document, domId) :
      publ.orgGetElementById(domId) );
  } 

  function getElementByIdReplacement (domId) {
    var el = getElementById(domId),
      html, frag, div, found; 

    function traverseForElById(domId, el) {
      var children = el.children, i, l, child;
      if(children && children.length) {
        for(i=0,l=children.length; i<l; i++) {
          child = children[i];
          if(child.id && child.id === domId) { return child; }
          if(child.children && child.children.length) {
            var tmp = traverseForElById(domId, child);
            if (tmp) return tmp;
          }
        }
      }
    } 

    function searchForAlreadyReturnedEl(domId) {
      var i, l, returnedEl;
      for(i=0,l=returnedElements.length; i<l; i++) {
        returnedEl = returnedElements[i];
        if(returnedEl.id === domId) { return returnedEl; }
      }
    } 

    if(el) { return el; } 

    if (returnedElements.length) {
      found = searchForAlreadyReturnedEl(domId);
      if (found) {
        return found;
      }
    } 

    if(inputBuffer.length) {
      html = inputBuffer.join("");
      frag = document.createDocumentFragment();
      div = document.createElement("div");
      div.innerHTML = html;
      frag.appendChild(div);
      found = traverseForElById(domId, div);
      if (found) {
        returnedElements.push(found);
      }
      return found;
    }
  } 

  var globalEval = (function () {
    return (window.execScript ? function(code, language) {
      window.execScript(code, language || "JavaScript");
    } : function(code, language) {
      if(language && !/^javascript/i.test(language)) { return; }
      window.eval.call(window, code);
    });
  }()); 

  function isScript (html) {
    return html.toLowerCase().indexOf("<script") === 0;
  } 

  function runFunc (obj) {
    obj.func();
    obj.depth++;
    flush(obj);
  } 

  function loadScript (obj) {
    loading++;
    // async loading code from jQuery
    var script = document.createElement("script");
    if(obj.type) { script.type = obj.type; }
    if(obj.charset) { script.charset = obj.charset; }
    if(obj.language) { script.language = obj.language; } 

    logScript(obj); 

    var done = false;
    // Attach handlers for all browsers
    script.onload = script.onreadystatechange = function() {
      loading--;
      script.loaded = true;
      if ( !done && (!this.readyState ||
          this.readyState === "loaded" || this.readyState === "complete") ) {
        done = true;
        script.onload = script.onreadystatechange = null;
        debug("onload " + obj.src, obj);
        flush(obj);
      }
    }; 

    script.loaded = false;
    script.src = obj.src;
    obj.depth++; 

    // Use insertBefore instead of appendChild to circumvent an IE6 bug.
    // This arises when a base node is used (#2709 and #4378).
    head.insertBefore( script, head.firstChild );
    setTimeout(function() {
      if(!script.loaded) { throw new Error("SCRIPT NOT LOADED: " + script.src); }
    }, obj.timeout);
  } 

  function logScript (obj, code, lang) {
    debug((code ?
      "Inline " + lang + ": " + code.replace("\n", " ").substr(0, 30) + "..." :
      "Inject " + obj.src), obj);
  } 

  function separateScriptsFromHtml (htmlStr) {
    return split(htmlStr, splitScriptsRegex);
  } 

  function split (str, regexp) {
    var match, prevIndex=0, tmp, result = [], i, l; 

    if(support.splitWithCapturingParentheses) {
      tmp = str.split(regexp);
    } else {
      // Cross browser split technique from Steven Levithan
      // http://blog.stevenlevithan.com/archives/cross-browser-split
      tmp = [];
      while(match = regexp.exec(str)) {
        if(match.index > prevIndex) {
          result.push(str.slice(prevIndex, match.index));
        } 

        if(match.length > 1 && match.index < str.length) {
          Array.prototype.push.apply(tmp, match.slice(1));
        } 

        prevIndex = regexp.lastIndex;
      } 

      if(prevIndex < str.length) {
        tmp.push(str.slice(prevIndex));
      } 

    } 

    for(i=0, l=tmp.length; i<l; i=i+1) {
      if(tmp[i]!=="") { result.push(tmp[i]); }
    }
    return result;
  } 

  function stripNoScript (html) {
    return html.replace(/<noscript>[\s\S]*?<\/noscript>/ig, "");
  } 

  function trim (str) {
    if(!str) { return str; }
    return str.replace(/^\s*|\s*$/gi, "");
  } 

  function writeHtml (html, obj) {
    if( isScript(html) ) {
      var dummy = document.createElement("div");
      dummy.innerHTML = "dummy<div>" + html + "</div>"; // trick for IE
      var script = dummy.children[0].children[0];
      var lang = script.getAttribute("language") || "javascript";
      if(script.src) {
        obj.src = script.src;
        obj.charset = script.charset;
        obj.language = lang;
        obj.type = script.type;
        loadScript(obj);
      } else {
        var code = trim( script.text );
        if(code) {
          logScript( obj, code, lang);
          globalEval( code, lang);
        }
        flush(obj);
      }
    } else {
      var container = getCachedElById(obj.domId);
      if(!container) {
        throw new Error("crapLoader: Unable to inject html. Element with id '" + obj.domId + "' does not exist");
      } 

      html = trim(html); // newline before <object> cause weird effects in IE
      if(html) {
        container.innerHTML += html;
      }
      checkWriteBuffer(obj);
    }
  } 

  function writeReplacement (str) {
    inputBuffer.push(str);
    debug("write: " + str);
  } 

  function openReplacement () {
    // document.open() just returns the document when called from a blocking script:
    // http://www.whatwg.org/specs/web-apps/current-work/#dom-document-open
    return document;
  } 

  function closeReplacement () {
    // document.close() does nothing when called from a blocking script:
    // http://www.whatwg.org/specs/web-apps/current-work/#dom-document-close
  } 

  publ = {
    hijack: function(options) {
      if(isHijacked) { return; }
      isHijacked = true;
      extend(globalOptions, options);
      if(globalOptions.parallel && !support.scriptOnloadTriggeredAccurately) {
        globalOptions.parallel = false;
        debug("Browsers onload is not reliable. Disabling parallel loading.");
      } 

      document.write = document.writeln = writeReplacement;
      document.open = openReplacement;
      document.close = closeReplacement;
      document.getElementById = getElementByIdReplacement;
    }, 

    release: function() {
      if(!isHijacked) { return; }
      isHijacked = false;
      document.write = this.orgWrite;
      document.writeln = this.orgWriteLn;
      document.open = this.orgOpen;
      document.close = this.orgClose;
      document.getElementById = this.orgGetElementById;
      elementCache = {};
    }, 

    handle: function(options) {
      if(!isHijacked) {
        debug("Not in hijacked mode. Auto-hijacking.");
        this.hijack();
      }
      var defaultOptsCopy = extend({}, defaultOptions);
      var obj = extend(defaultOptsCopy, options);
      obj.depth = 0; 

      if (!obj.domId) {
        obj.domId = "craploader_" + new Date().getTime();
        var span = document.createElement("span");
        span.id = obj.domId;
        document.body.appendChild(span);
      } 

      if (options.func) {
        runFunc(obj);
        return;
      } 

      if(globalOptions.parallel) {
        setTimeout(function() {
          loadScript(obj);
        }, 1);
      } else {
        queue.push(obj);
        setTimeout(function() {
          if(loading === 0) {
            checkQueue();
          }
        }, 1);
      }
    }, 

    loadScript: function(src, domId, options) {
      if (typeof domId !== "string") {
        options = domId;
        domId = undefined;
      }
      this.handle(extend({
        src:  src,
        domId: domId
      }, options));
    }, 

    runFunc: function(func, domId, options) {
      if (typeof domId !== "string") {
        options = domId;
        domId = undefined;
      }
      this.handle( extend({
        domId: domId,
        func:   func
      }, options) );
    }, 

    orgGetElementById  : document.getElementById,
    orgWrite      : document.write,
    orgWriteLn     : document.writeln,
    orgOpen       : document.open,
    orgClose      : document.close,
    _olt        : 1,
    _oltCallback    : function() {
      support.scriptOnloadTriggeredAccurately = (publ._olt===2);
    }
  }; 

  return publ;
}());

demo.php示例程序如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
 <meta http-equiv="content-type" content="text/html; charset=utf-8">
 <title> AD Loader </title>
 <style type="text/css">
 .banner1{margin:10px; border:1px solid #CCCCCC; width:728px; height:90px;}
 .banner2{margin:10px; border:1px solid #CCCCCC; width:300px; height:250px;}
 </style>
 <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
 </head> 

 <body>
 <div class="banner1" id="ad_728x90"></div>
 <div class="banner2" id="ad_300x250"></div>
 <div class="banner2" id="ad_l2_300x250"></div> 

 <?php
  function showAD($channel='', $step='', $async=''){
   include('ADLoader.class.php');
   $ad_config = include('ADConfig.php');
   ADLoader::setConfig($ad_config, 'ADLoader.js');
   return ADLoader::load($channel, $step, $async);
  } 

  echo showAD('case_openx'); // 异步加载
  //echo showAD('case_url');  // url方式异步加载
  //echo showAD('case_sync_openx', 300, false); // 同步加载
 ?> 

 </body>
</html>

adurl.php文件如下:

<?php
$zoneid = isset($_GET['zoneid'])? intval($_GET['zoneid']) : 0;
if($zoneid){
?>
var zoneid = <?=$zoneid ?>;
var m3_u = (location.protocol=='https:'?'https://ads.nmg.com.hk/www/delivery/ajs.php':'http://ads.nmg.com.hk/www/delivery/ajs.php');
var m3_r = Math.floor(Math.random()*99999999999);
if (!document.MAX_used) document.MAX_used = ',';
document.write ("<scr"+"ipt type='text/javascript' src='"+m3_u);
document.write ("?zoneid=" + zoneid);
document.write ('&cb=' + m3_r);
if (document.MAX_used != ',') document.write ("&exclude=" + document.MAX_used);
document.write (document.charset ? '&charset='+document.charset : (document.characterSet ? '&charset='+document.characterSet : ''));
document.write ("&loc=" + escape(window.location));
if (document.referrer) document.write ("&referer=" + escape(document.referrer));
if (document.context) document.write ("&context=" + escape(document.context));
if (document.mmm_fo) document.write ("&mmm_fo=1");
document.write ("'><\/scr"+"ipt>");
<? } ?>

本文所述完整实例源码点击此处本站下载。

希望本文所述对大家的php程序设计有所帮助。

时间: 2014-09-22

PHP命名空间和自动加载类

PHP的命名空间(namespace)是php5.3之后才有的.这个概念在C#中已经很早就有了,php中的namespace其实和c#的概念是一样的. 为什么php中要使用namespace? 假设如果不使用namespace,那么每个类在一个项目中的名字就必须是固定的.因为php在new的时候不管是调用autoload还是调用已加载过的类,都存在一个类名对应的文件.所以在没有namespace的时候,我们会想各种命名规则来区分不同的类,比如project1_school1_class1_Stu

php使用simplexml_load_file加载XML文件并显示XML的方法

本文实例讲述了php使用simplexml_load_file加载XML文件并显示XML的方法.分享给大家供大家参考.具体实现方法如下: <?php $xml = simplexml_load_file("sample.xml"); echo htmlspecialchars($xml->asXML()); ?> sample.xml文件内容如下 <library> <book> <title>A</title> <

PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间

PHP前言: •动态地创建属性和方法 •对象的复制 •对象的比较 •加载指定的文件 •自动加载类文件 •命名空间 示例 1.类的相关知识点 3(动态地创建属性和方法) class/class3.php <?php /** * 类的相关知识点 3(动态地创建属性和方法) */ // 用于演示如何动态地创建属性(这就是 php 中所谓的重载) class Class1 { // __set 魔术方法,当设置的属性不存在或者不可访问(private)时就会调用此函数 public function _

PHP面向对象程序设计之命名空间与自动加载类详解

本文实例讲述了PHP面向对象程序设计之命名空间与自动加载类.分享给大家供大家参考,具体如下: 命名空间 避免类名重复,而产生错误. <?php require_once "useful/Outputter.php"; class Outputter { // output data private $name; public function setName($name) { $this->name = $name; } public function getName()

PHP框架自动加载类文件原理详解

描述:公司项目PHP用作中间转发层(接收http请求,用 socket跟c++做通信),由于代码没有用到框架,这些东西自然就是之前的人自己写的.最近需要对这个底层进行优化,于是便看了下这部分的代码. 目的:这块代码的主要作用是把主目录下的所有插件类一次性全部加载进来.当使用尚未被定义的类(class)和接口(interface)时自动去加载.通过注册自动加载器,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类. 实现方法:主要用到PHP函数__autoload() 详细: error_

php ci框架中加载css和js文件失败的解决方法

在将html页面整合到ci框架里面的时候,加载css和js失败,弄了半天发现ci框架是入口的框架,对框架中文件的所有请求都需要经过index.php处理完成,当加载外部的css和js文件的时候要使用base_url()函数处理外部的链接. 比如: 在config配置文件中的base_url为:" localhost:8080/项目名称/ " 在控制器中访问application/resource/aaa.js文件 相对路径<script src= "resource/a

php _autoload自动加载类与机制分析

在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可 test.class.php 复制代码 代码如下: <?php class abc{ function __construct() { echo 'www.hzhuti.com; } } ?> load.php 代码如下 复制代码 代码如下: <?php class LOAD { static function loadClass($class_name) { $filename = $cl

php ci框架中加载css和js文件失败的原因及解决方法

在将html页面整合到ci框架里面的时候,加载css和js失败,弄了半天发现ci框架是入口的框架, 对框架中文件的所有请求都需要经过index.php处理完成,当加载外部的css和js文件的时候要使 用base_url()函数处理外部的链接. 比如: 在config配置文件中的base_url为:" localhost:8080/项目名称/ " 在控制器中访问application/resource/aaa.js文件 相对路径<script src= "resource

php include加载文件两种方式效率比较

先来说说两种方式: 1)定义一个字符串变量,里面保存要加载的文件列表.然后foreach加载. 复制代码 代码如下: $a = '/a.class.php;/Util/b.class.php;/Util/c.class.php'; $b = '/d.php;/e.class.php;/f.class.php;/g.class.php'; // 加载基本系统文件 $kernel_require_files = explode(';', $a);//SYS_REQUIRE_LIB_FILE_LIST

php面向对象全攻略 (十七) 自动加载类

自动加载类 很多开发者写面向对象的应用程序时,对每个类的定义建立一个PHP 源文件.一个很大 的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件的列表. 在软件开发的系统中,不可能把所有的类都写在一个PHP 文件中,当在一个PHP 文件 中需要调用另一个文件中声明的类时,就需要通过include 把这个文件引入.不过有的时候, 在文件众多的项目中,要一一将所需类的文件都include 进来,是一个很让人头疼的事,所以 我们能不能在用到什么类的时候,再把这个类所在的PHP 文件导入

Yii2中YiiBase自动加载类、引用文件方法分析(autoload)

本文实例分析了Yii2中YiiBase自动加载类.引用文件的方法.分享给大家供大家参考,具体如下: 在Yii2中这个函数是用来加载类的,没有直接引用文件的相关实现.但是这个也可以用来引用文件. public static function autoload($className) { /* * $classMap是一个name-value数组, * name为类的名称, * value为这个类的文件路径,其中路径可包含别名 * * 首先在$classMap中查找是否设置了类别名路径 */ if

PHP命名空间与自动加载类详解

本文实例讲述了PHP命名空间与自动加载类.分享给大家供大家参考,具体如下: 今天我要给大家介绍的是PHP的命名空间 和 自动加载类 我先简单的分开演示 在放在一起 大家请看: 什么是自动加载类? 想必大家都应该知道__autoload 这个魔术方法 $db = new DB(); function __autoload($className) { echo $className; exit(); //在这个里面引用类 } 在运用这个类只能加载一次 ,在很多时候我们要引入的不止一个类这个时候怎么办

PHP 自动加载类原理与用法实例分析

本文实例讲述了PHP 自动加载类原理与用法.分享给大家供大家参考,具体如下: 类的自动加载 (Autoloading Classes) 在编写面向对象(OOP) 程序时,很多开发者为每个类新建一个 PHP 文件. 这会带来一个烦恼:每个脚本的开头,都需要包含(include)一个长长的列表(每个类都有个文件). 在 PHP 5 中,已经不再需要这样了. spl_autoload_register() 函数可以注册任意数量的自动加载器,当使用尚未被定义的类(class)和接口(interface)

Yii实现自动加载类地图的方法

本文实例讲述了Yii实现自动加载类地图的方法.分享给大家供大家参考.具体如下: Yii继承的一个静态属性$classMap,可以用于Yii的自动加载类地图.数组中的键是类名,数组中的值是相应类文件的路径. require_once($yii); $app = Yii::createWebApplication($config); Yii::$classMap = array( 'JPhpMailer' => Yii::getPathOfAlias('ext') . '/phpmailer/JPh

解析zend Framework如何自动加载类

1.模块中类的自动载入 复制代码 代码如下: $loader = new Zend_Application_Module_Autoloader(array(   //模块内容自动加载类    'namespace' => 'Blog',//命名空间定义 即方法的开头为Blog_    'basePath'  => APPLICATION_PATH . '/modules/blog',//模块位置)); 2. 自动载入 复制代码 代码如下: require_once 'Zend/Loader/A