PHP 自动引入一个目录的所有 PHP 文件

 更新时间:2016年11月25日 14:58  点击:1455
我爱水煮鱼有个微信插件,会时不时的退出一些插件的 “插件”,直接下载一个提供的 PHP 文件,上传到插件一个指定的目录即可,插件会自动检测、引入并执行这个文件,研究了下,也想弄一个类似的功能。

 

 代码如下 复制代码
/*
 *引入一个目录的所有文件
 *http://www.111cn.net
*/
function Bing_include_all_php( $folder ){
 foreach( glob( "{$folder}/*.php" ) as $filename ) require_once $filename;
}

使用方法就是直接调用这个函数,第一个参数放上要引入的相对目录即可。

还有一种办法可以使用魔术方法__autoload来加载

 代码如下 复制代码

set_include_path('aa' . PATH_SEPARATOR . get_include_path());
function __autoload($className)
{
    //如果加这个检测, 因为此文件不在当前目录下,它就会检测不到文件存在,
   //但include是能成功的
    if (file_exists($className . '.php')) {
   include_once($className . '.php');
    } else {
        exit('no file');
    }
}
 
$a = new Acls();

我们一般使用_autoload自动加载类如下:

 代码如下 复制代码

<?php  
 
  function __autoload($class_name) {  
       require_once ($class_name . “class.php”);  
  }  
   $memo= new Demo();  

星际的战斗达到后面,地图里面的部队很多,如果我们把每个兵的图像动画和属性值作为一个对象的话,系统的内存里会消耗极大

我们在玩的时候会发现,因为星际里面的种族只有三个,其实兵种只有几十个。

虽然每个独立的士兵剩余的血不同,但是同一兵种的图像动画是一样的,即使不同的玩家,只是不同的颜色。比如每个人族的机枪兵。

而且大多数玩家只用到常用的一些兵种,很多时候不会制造所有的兵种。

待解决的问题:把把兵种的图像动画共享。

思路:我们把每个兵种的图像动画建模作为对象,放入内存共享。一旦有某个画面用到这个兵种,只要把共享的图像动画拿出来,更改颜色就可以了。

享元(Flyweight)模式示例:

 代码如下 复制代码

<?php

//机枪兵享元

class MarineFlyweight

{

  //绘制机枪兵的图像动画,参数为状态,比如属于哪一个玩家

  public function drawMarine($state)

  {

  //绘制机枪兵

  }

}

//享元工厂

class FlyweightFactory

{

  //享元数组,用于存放多个享元

  private $flyweights;

  //获取享元的方法

  public function getFlyweight($name)

  {

    if (!isset($flyweights[$name]))

    {

      $flyweights[$name] = new $name."Flyweight";

    }

    return $flyweights[$name];

  }

}

//初始化享元工厂

$flyweightFactory = new FlyweightFactory();

//当我们需要绘制一个机枪兵的时候,同时传递一个状态数组,里面包含剩余的血等等

$marine = $flyweightFactory->getFlyweight("Marine");

$marine->drawMarine($status);

?>

用途总结:享元模式可以将需要共享的资源集中起来,统一管理,防止重复消耗。

实现总结:需要一个享元工厂管理共享的资源,比如上面的FlyweightFactory。把所有共享的资源的生产全部交给个享元工厂。

在php中流程控制包括了if,switch常用的两种流程控制语句了,下面我就来简单的介绍一下它们的应用例子,希望对各位会有所帮助。

一:顺序结构
二:分支结构(条件结构,选择结构)
   1.单路分支:
                 //条件:bool,true或false,> < == != & || ! isset()
              if(条件)
             执行下面一条语句
     
     if(条件)
     {
           代码段:
     代码段:
   
     }
   
  例子:
       代码:
  
         $a=10;
      $b=5;
      if($a > $b)
         echo “$a是大于$b的”;
   2.双路分支:
 
             使用else语句
  
      if(条件)
             执行一条语句
      else
             执行一条语句
     
    if(条件){
           一条或多条代码
    }else{
           一条或多条代码
    }
  例子:
      代码:
  
       $a=10;
    $b=20;
     if($a > $b){
               echo “$a大于$b<br>”;
     }else{
               echo “$a小于$b<br>”;
     }
   3.多路分支:
 
             可以使用 if else if 和swich case
    //这是一种互斥的关系
  
       if(条件){
   
    }elseif(条件){
   
    }elseif(条件){
   
    }elseif(条件){
   
    }else{
   
    }
   
    switch(变量){
           case 值:
                代码:
          break;
         case 值1:
              代码;
        break;
      default;
   
   
    }
   
     例子:
         代码:
    
          $hour=date(“H”);
     
       if($hour > 6 && $hour < 9){
                echo “早上好”;
       }elseif($hour > 9 && $hour < 12){
                echo “上午好”;
       }elseif($hour > 12 && $hour < 14){
                echo “中午好”;
       }elseif($hour > 14 && $hour < 17){
                echo “下午好”;
       }elseif($hour > 17 && $hour < 19){
                echo “傍晚好”;
       }elseif($hour > 19 && $hour < 22){
                echo “晚上好”;
       }elseif($hour > 22 && $hour < 24){
                echo “深夜好”;
       }else{
                echo “凌晨好”;
       }
     以上代码也可以写成
          $hour=date(“H”);  //因为有互斥关系,当执行到正确代码时,就不会执行下一段代码。
     
       if($hour < 6){
                echo “凌晨好”;
       }
       if($hour < 9){
                echo “早上好”;
       }elseif($hour < 12){
                echo “上午好”;
       }elseif($hour < 14){
                echo “中午好”;
       }elseif($hour < 17){
                echo “下午好”;
       }elseif($hour < 19){
                echo “傍晚好”;
       }elseif($hour < 22){
                echo “晚上好”;
       }elseif($hour < 24){
                echo “深夜好”;
       }else{
                echo “您好”;
       }
     例子:
          代码:
            $week=date(“D”);
     
      //switch(变量)  这里的变量只使用整型和字符串
      //default 如果变量没有匹配的值,则执行default中的区域
      //break 是退出switch语句,用来设置多个值匹配执行同一段代码
      switch($week){
              case “Mon”:
             echo “星期一”;
          break;
              case “Tue”:
             echo “星期二”;
          break;
              case “Wed”:
             echo “星期三”;
          break;
              case “Thu”:
             echo “星期四”;
          break;
              case “Fri”:
             echo “星期五”;
          break;
        default:
                echo “周末”;
      }
   
    如果是判断一段范围我们使用elseif
    如果是单个值我们使用switch
    
   4.嵌套分支:
 
              if(){
              if(){
      
        }else{
      
           if(){
      
        }else{
      
        }
        }
   
     }else{
         if(){
    
      }else{
          switch(){
     
       }
      }
   
   
     }
   
  例子:
       代码:
         $sex=$_GET["sex"];
    
      $age=$_GET["age"];
    
      if($sex=”man”){
             if($age >= 60){
                echo “这位男士已经退休,他退休”.($age-60).”年了”;
       }else{
     
                echo “这位男士还在工作,还有”.(60-$age).”年退休”;
       }
    
      }else{
            if($age >= 55){
              echo “这位女士已经退休了,她退休”.($age-55).”年了”;
     
      }else{
              echo “这位女士还在工作,还有”.(55-$age).”年退休”;
      }
    
    
      }
//以上代码用了GET,所以访问的话是 ?sex=man&age=33

网址的跳转最常用的就是在黄页类,淘宝客类等有很多外部链接的网站上使用,避免大量外链降低网站自身的权重。

这里列举几个跳转方法:

网上最常见的一种方法:

 代码如下 复制代码

<?php

$url = $_GET['url'];
Header("Location:$url");
?>

把这段代码放到一个文件夹,命名为 比如go.php

然后go.php?url=需要跳转的网址,如果需要跳转淘宝客等产品链接,由于带有参数,需要修改下代码,用如下的代码

 代码如下 复制代码
<?php
$qstring = $_SERVER['QUERY_STRING'];
$url  = substr($qstring,4);
header("Location: $url");
?>

另外还有很多js html的代码等等,就不介绍了,有需要的网上搜索一大把。

运算符是php中非常重的一个知识点了,现在我在学习php时对运算符用到的一些例子与知识点,下面整理了一些朋友写得非常的好内容与大家一起来学习吧。

运算符号(操作符号)

  按运算符号的功能分为
 
一:算术运算符 (+ - * / % ++ --)
   % //有两个目的:整出运算;控制范围的运算(不要用小数,也不要用负数)
 //会把两边的数转为整数后再进行整除
  
 例子:
代码:
  $year=?;
 if(($year%4==0 && $year%100!=0) || $year%400==0){
   echo "是闰年";
 }else{
   echo "不是闰年";
 }
   代码:
  $a=109009;
 echo $a%10;

   ++和--
  
 例子:
代码:
  $a=10;
 
 $a++; //$a=$a+1  先用变量在自增1
 ++$a; //$a=$a+1  先用自增1再用变量
 $a--; //$a=$a-1  先用变量再自减1
 --$a; //$a=$a-1  先自减1再用变量
   代码:
  $a=10;
  $b=$a++;  //b=10,a=11
  $c= --$b;  //c=9,b=9
  $d=$c++ + ++$c;  //d=20,c=11
  $e=$d-- - --$d;  //e=2,d=18
 二:字符串运算符(.)
 
 三:赋值运算符(= += -= *= %= .=)
 
 例子:
 代码:
   $a=10;
   $a+=10;  //$a=$a+10;
   $a-=10;  //$a=$a-10;
   $a*=10;  //$a=$a*10;
   $a/=10;  //$a=$a/10;
   $a%=10;  //$a=$a%10;
   $a.="abc";  //$a=$a."abc";
 四:比较运算符(> < >= <= == === !=或<> !==)  //也叫条件运算符,关系运算符
 比较后结果只有一种:boolean true false
 
   ==和===  //比较时不仅要求内容相同,也要求类型相同
  
 例子:
 代码:
   $a=10;
if($a=100){
 echo "正确";
}else{
 echo "错误";
}   //结果为正确,可是10是不会大于100的,因为=号是赋值,不是比较符号

代码:
   $a=100;
if($a==100){
echo "正确";
}else{
echo "错误";
}  //结果为正确,因为==意思为是否等于的意思。

代码:
   $a=100;
if($a=="100"){
 echo "正确";
}else{
 echo "错误";
}  //结果为正确,因为==比较的是内容,不要求类型

代码:
   $a=100;
if($a==="100"){
echo "正确";
}else{
 echo "错误";
}  //结果为错误,因为===不仅比较内容,还要要求类型,"100"是字符类型

代码:
   $a=100;
if($a===100){
  echo "正确";
}else{
  echo "错误";
}  //结果为正确

   !==  // 这个是要求内容不相同,同时类型要不相同

 五:逻辑运算符(&&或and ||或or !或not)
 
逻辑运算符只能操作bool型值,返回的也是bool型值

  例子:
代码:
   var_dump(true && true);  //true
   var_dump(true && false);  //false
   var_dump(true || false);  //true
   var_dump(!true);  //false
   var_dump(!false);  //true
 
 六:位运算符(& | ^ ~ << >> >>>)
 & 和 | 既可以作为逻辑运算符号,又可以做为位运算符号
 短路问题:&& 和|| 会发生短路
 && 在做运算时,如果前面的参数是false,则后面是否为true,整个表达式都是false,所以就不去执行后面的操作数
 || 在做运算时,如果前面的参数是true,则后面的是否为false,整个表达式都是true,所以就不去执行后面的操作数
 & 或 | 在做运算时,两边都会被执行
 七:其他运算符(? : `` @ => -> :: & $)
 
条件 ?成立执行这里 :不成立执行这里

 例子:
   代码:
 $a=10;
 $b=$a>5 ? $a : 5;  //如果$a大于5就把$a赋值给$b,否则就是将5赋值给$b
 echo $b;  //结果是10
 
 `` //执行系统命令的
 例子: www.111cn.net
  代码:
$ip=`ipconfig`;
echo "<pre>";
echo $ip;
echo "</pre>";
  @  //屏蔽错误
 
例子:
  代码:
  @getType();
 echo "mkmkmkmkmkmk<br>";

[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • 解决Pycharm的项目目录突然消失的问题

    今天小编就为大家分享一篇解决Pycharm的项目目录突然消失的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-22
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • MyBatis-Plus自动填充功能失效导致的原因及解决

    这篇文章主要介绍了MyBatis-Plus自动填充功能失效导致的原因及解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-04
  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • AI源文件转photoshop图像变模糊问题解决教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
  • C++万能库头文件在vs中的安装步骤(图文)

    这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • C#路径,文件,目录及IO常见操作汇总

    这篇文章主要介绍了C#路径,文件,目录及IO常见操作,较为详细的分析并汇总了C#关于路径,文件,目录及IO常见操作,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
  • C#使用StreamWriter写入文件的方法

    这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
  • ant design中upload组件上传大文件,显示进度条进度的实例

    这篇文章主要介绍了ant design中upload组件上传大文件,显示进度条进度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29
  • php实现文件下载实例分享

    举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07