PHP namespace 命名空间详解

 更新时间:2016年11月25日 17:32  点击:1954

在这里中我们介绍了php教程命名空间的用途和namespace关键字,在这篇文章中我们将介绍一下use命令的使用以及php如何解析命名空间的名字的。

namespace bakbaba;
function bab(){
    echo "bi";
}
namespace kkk;
function k1(){
    echo "k1";
}


bakbababab();//在kkk的命名空间下使用别的命名空间,注意前面的
use bakbaba as b;//依旧在kkk的命名空间下,但是用别名的的时候以下方法也正确
#use bakbaba as b;//前面可以不使用号
bbab();//使用别名下命名空间的时候前面不该有号
k1();//调用该函数没有报错,说明use不影响当前当前命名空间

 

< ?php  
// application library 1  
namespace applib1;  
const myconst = 'applib1myconst';  
function myfunction() {  
 return __function__;  
}  
class myclass {  
 static function whoami() {  
eturn __method__;  
 }  
}  
?>
 


lib2.php
< ?php  
// application library 2  
namespace applib2;  
 
const myconst = 'applib2myconst';  
 
function myfunction() {  
 return __function__;  
}  
 
class myclass {  
 static function whoami() {  
eturn __method__;  
 }  
}  
?> 

幸好在手册中发现这么一段代码,故手册中其他关于namespace的内容,就可以忽略了,直接看下面的代码

 

<?php
namespace a;
use bd, ce as f;

// 函数调用

foo();      // 首先尝试调用定义在命名空间"a"中的函数foo()
            // 再尝试调用全局函数 "foo"

foo();     // 调用全局空间函数 "foo"

myfoo();   // 调用定义在命名空间"amy"中函数 "foo"

f();        // 首先尝试调用定义在命名空间"a"中的函数 "f"
            // 再尝试调用全局函数 "f"

// 类引用

new b();    // 创建命名空间 "a" 中定义的类 "b" 的一个对象
            // 如果未找到,则尝试自动装载类 "ab"

new d();    // 使用导入规则,创建命名空间 "b" 中定义的类 "d" 的一个对象
            // 如果未找到,则尝试自动装载类 "bd"

new f();    // 使用导入规则,创建命名空间 "c" 中定义的类 "e" 的一个对象
            // 如果未找到,则尝试自动装载类 "ce"

new b();   // 创建定义在全局空间中的类 "b" 的一个对象
            // 如果未发现,则尝试自动装载类 "b"

new d();   // 创建定义在全局空间中的类 "d" 的一个对象
            // 如果未发现,则尝试自动装载类 "d"

new f();   // 创建定义在全局空间中的类 "f" 的一个对象
            // 如果未发现,则尝试自动装载类 "f"

// 调用另一个命名空间中的静态方法或命名空间函数

bfoo();    // 调用命名空间 "ab" 中函数 "foo"

b::foo();   // 调用命名空间 "a" 中定义的类 "b" 的 "foo" 方法
            // 如果未找到类 "ab" ,则尝试自动装载类 "ab"

d::foo();   // 使用导入规则,调用命名空间 "b" 中定义的类 "d" 的 "foo" 方法
            // 如果类 "bd" 未找到,则尝试自动装载类 "bd"

bfoo();   // 调用命名空间 "b" 中的函数 "foo"

b::foo();  // 调用全局空间中的类 "b" 的 "foo" 方法
            // 如果类 "b" 未找到,则尝试自动装载类 "b"

// 当前命名空间中的静态方法或函数

ab::foo();   // 调用命名空间 "aa" 中定义的类 "b" 的 "foo" 方法
              // 如果类 "aab" 未找到,则尝试自动装载类 "aab"

ab::foo();  // 调用命名空间 "ab" 中定义的类 "b" 的 "foo" 方法
              // 如果类 "ab" 未找到,则尝试自动装载类 "ab"
?>

php教程 preg_match_all正则匹配字符串所有连接地址
*/

$str ='<a href="http://www.a.com/2010/11-15/5.html">4</a>
  <a href="http://www.b.com/2010/11-15/6.html">5</a>
  <a href="http://www.b.com/2010/11-15/1.html">6</a>


  ';

$ymd=date("y")."/".date("m-d");
$b = preg_match_all('/<a href="(.*?)com/'.$ymd.'(.*?)html">(.*?)</a>/',$a,$c,preg_set_order);

/*

int preg_match_all ( string $pattern , string $subject , array &$matches [, int $flags [, int $offset ]] );搜索所有匹配正则表达式的模式并提出给予他们在比赛中受的标志指定的顺序。第一场比赛后发现,随后的搜查是继续从最后一场比赛结束。


更多详细内容请查看:http://www.111cn.net/phper/php-cy/33670.htm

<?
function turntopage($url="index.php",$info = "页面转向中...",$second=2){
print "<html>n<head>n<title>页面转向中....</title>n";
print "<meta http-equiv="refresh" content="$second;url=$url">n"; //开源代码111cn.net
print "<style type="text/css教程">n<!--n";
print "td { font-family: "verdana", "arial";font-size: 12px}n";
print "a {color: #000000; text-decoration: none}n";
print "-->n</style>n";
print "</head>n<body>n";
print "<table width="100%" border="0" align="center">n";

//111cn.net

print " <tr>n";
print " <td height="200"> </td>n";
print " </tr>n";
print " <tr>n";
print " <td align="center">n";
print " <table width="60%" border="0" cellpadding="8" bgcolor="#aa9fff">n";

//开源代码111cn.net

print " <tr>n";
print " <td height="30" align="center">页面转向提示信息</td>n";
print " </tr>n";
print " <tr>n";
print " <td align="center">$info</td>n";
print " </tr>n";
print " <tr>n";

//111cn.net

print " <td align="center">n";
print " <a href="$url">如果你的浏览器不支持自动跳转,请按这里</a></td>n";
print " </tr>n";
print " </tr>n";
print " </table></td>n";
print " </tr>n";
print " <tr>n"; //开源111cn.net
print " <td height="200"> </td>n";
print " </tr>n";
print "</table>n";
print "</body>n</html>";
exit;
?>

php重定向
<?
方法一:header("location: index.php");
方法二:echo "<scrīpt>window.location ="$php_self";</scrīpt>";

//开源代码111cn.net

方法三:echo "<meta http-equiv="refresh" content="0; url=index.php">";
?>

 

其它原理很简单,利用form表单的target属性和iframe来实现的,打开为iframe试就行了,返回就利用js判断php教程运行后返回的参数是不是成功
一、上传文件的一个php方法。
该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失败,则返回空字符串。

php代码

    function uploadfile($file) {
        // 上传路径     $destinationpath = "./upload/";
        if (!file_exists($destinationpath)){
            mkdir($destinationpath , 0777);     }
        //重命名
        $filename = date('ymdhis') . '_' . iconv('utf-8' , 'gb2312' , basename($file['name']));
        if (move_uploaded_file($file['tmp_name'], $destinationpath . $filename)) {         return iconv('gb2312' , 'utf-8' , $filename);
        }     return '';
      }

二、客户端html代码
这里正是技巧所在,添加另一个iframe来实现。表单标签form定义了一个属性target,该属性解释如下:
[pre]target属性:
_blank   ----------   新开窗口
_self   -----------   自身
_top   ------------   主框架
_parent   ---------   父框架
自定义名字     -----   出现于框架结构,将会在该名称的框架内打开链接

本例中采用iframe名字,所以表单在提交时会在iframe内打开链接(即无刷新,确切的说应该是
感觉无刷新)
在表单提交时,调用startupload方法,当然这是js定义的。
[/pre][pre]此外我们还定义一个span来显示提示信息。代码如下:
[/pre]xhtml代码

   

<form id="upform" action="upload.php" method="post" enctype="multipart/form-data" target="upload_target" onsubmit="startupload()"> 导入文件:<input type="file" name="myfile" id="myfile" />
    <input type="submit" name="submitbtn" value="导入" /> <iframe id="upload_target" name="upload_target" src="#" style="width:0;height:0;border:0px solid #fff;">iframe>
    form> <span id="info">span>

三、js部分

这部分比较简单,只是显示提示信息

网页特效代码
    function startupload() {
        var spanobj = document.getelementbyid("info");     spanobj.innerhtml = " 开始上传";
    }
    function stopupload(responsetext){     var spanobj = document.getelementbyid("info");
        spanobj.innerhtml = " 上传成功;     spanobj.innerhtml = responsetext;
      }

接下来就要看服务器端得处理了。

四、服务器段处理部分

php代码

    $file = $_files['myfile'];   $filename = uploadfile($file);
      $result = readfromfile("./upload/" . $filename);

此外在后面还应该加上一句js代码用来调用stopupload方法。
javascript代码

  

    window.top.window.stopupload("");

最后在补上php中的readfromfile方法,就大功告成了。
php代码

    function readfromfile($target_path) {
        // 读取文件内容     $file = fopen($target_path,'r') or die("unable to open file");
        $filecontent = '';     while(!feof($file))
        {         $str = fgets($file);
            $filecontent .= $str;     }
        fclose($file);     return $filecontent;
      }

总结:方法很简单扼要,如果你以前没想到觉得ajax无刷新文件上传很难,现在明白利用iframe target来制作就觉得很容易了。

第一种比较简单就是files利用index.php教程接入值就成了,没经过判断,都会用到move_uploaded_files与files[]全局变量如下

第一个参数是表单的 input name,第二个下标可以是 "name", "type", "size", "tmp_name" 或 "error"。就像这样:

$_files["file"]["name"] - 被上传文件的名称
$_files["file"]["type"] - 被上传文件的类型
$_files["file"]["size"] - 被上传文件的大小,以字节计
$_files["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
$_files["file"]["error"] - 由文件上传导致的错误代码
这是一种非常简单文件上传方式。基于安全方面的考虑,您应当增加有关什么用户有权上传文件的限制

 

<form action="index.php" method="post"  enctype="multipart/form-data">
      缩略图:<input type="file" name="files" />
      <input type="submit" value="提交"/>
    </form>
  </body>
</html>

php代码

1 <?php2         $temp_name = $_files[files][tmp_name];            //临时文件3          $now_name  = $_files[files][name];                    //当前文件4          move_uploaded_file($temp_name,'./images/'.date('yyyymdhis').$now_name);    //移动到指定的文件夹下面5  ?>

下面来看一个完整一点的文件上传代码

html>
<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="submit" />
</form>

</body>
</html>

php处理文件

<?php
if ($_files["file"]["error"] > 0)
  {
  echo "error: " . $_files["file"]["error"] . "<br />";
  }
else
  {
  echo "upload: " . $_files["file"]["name"] . "<br />";
  echo "type: " . $_files["file"]["type"] . "<br />";
  echo "size: " . ($_files["file"]["size"] / 1024) . " kb<br />";
  echo "stored in: " . $_files["file"]["tmp_name"];
  }
?>

<form> 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 "multipart/form-data"。

<input> 标签的 type="file" 属性规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。

注释:允许用户上传文件是一个巨大的安全风险。请仅仅允许可信的用户执行文件上传操作。

如果你要限制文件上传类型与大小可以这样

if ((($_files["file"]["type"] == "image/gif")
|| ($_files["file"]["type"] == "image/jpeg")
|| ($_files["file"]["type"] == "image/pjpeg"))
&& ($_files["file"]["size"] < 20000))

[!--infotagslink--]

相关文章

  • C#变量命名规则小结

    本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
  • 阿里规范:为何boolean类型变量命名禁用is开头

    这篇文章主要给大家介绍了关于阿里规范:为何boolean类型变量命名禁用is开头的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-08-31
  • Swift中的命名空间详解

    这篇文章主要给大家介绍了关于Swift中命名空间的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-30
  • 老生常谈javascript变量的命名规范和注释

    下面小编就为大家带来一篇老生常谈javascript变量的命名规范和注释。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-02
  • c# 如何使用 My 命名空间

    这篇文章主要介绍了c# 如何使用 My 命名空间,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2020-12-08
  • C# 命名空间(Namespace)相关知识总结

    这篇文章主要介绍了C# 命名空间(Namespace)的相关知识,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以参考下...2020-11-03
  • C++与namespace有关的两个编译错误的讲解

    今天小编就为大家分享一篇关于C++与namespace有关的两个编译错误的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...2020-04-25
  • 浅析JavaScript中命名空间namespace模式

    namespace即“命名空间”,也称“名称空间” 、”名字空间”。接下来通过本文给大家介绍JavaScript中命名空间namespace模式的相关知识,非常不错,具有参考借鉴价值,感兴趣的朋友一起学习吧...2016-06-24
  • R语言变量重编码、重命名的操作

    这篇文章主要介绍了R语言变量重编码、重命名的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • php中命名空间namespace用法介绍

    PHP的命名空间(namespace)是php5.3之后才有的之前学习php所以没有这个东西了,最近用到了php命名空间了,下面我们一起来看看命名空间namespace用法 现在说这个,感觉有...2016-11-25
  • .net的命名空间类库的简单介绍

    .net的命名空间类库的简单介绍,需要的朋友可以参考一下...2020-06-25
  • python标识符命名规范原理解析

    这篇文章主要介绍了python标识符命名规范原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-04-27
  • 关于Java中XML Namespace 命名空间问题

    这篇文章主要介绍了Java中XML Namespace 命名空间,XML命名空间是由国际化资源标识符 (IRI) 标识的 XML 元素和属性集合,该集合通常称作 XML“词汇”,对XML Namespace 命名空间相关知识感兴趣的朋友一起看看吧...2021-08-14
  • 关于.NET的集合总结

    集合是一些有共同特征的独立数据项组成的,通过集合,我们可以可以使用相同的调用代码来处理一个集合的所有元素,而不用单独处理每一个单独的项...2021-09-22
  • C#命名空间与java包的区别分析

    这篇文章主要介绍了C#命名空间与java包的区别,较为详细的分析了C#命名空间与java包的相同点与不同点,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • 一篇文章教你用Python实现一键文件重命名

    这篇文章主要介绍了如何用python一键文件重命名,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-07
  • C++编程中的命名空间基本知识讲解

    这篇文章主要介绍了C++编程中的命名空间基本知识讲解,包括对C++11中内联命名空间新特性的介绍,需要的朋友可以参考下...2020-04-25
  • PHP6 的namespace 命名空间

    php有namespace或类似的东西的。对于发布类库框架,或者构建大的程序来说是很重要的。可以避免类名和函数名冲突,又不用像Pear里那样把类名弄得老长。当初php5的测试版曾...2016-11-25
  • ASP.NET MVC命名空间时引起错误的解决方法

    这篇文章主要介绍了解决ASP.NET MVC 重命名(命名空间)而导致错误的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
  • C++命名空间实例解析

    这篇文章主要介绍了C++命名空间实例解析,对C++程序员来说是非常重要的知识点,需要的朋友可以参考下...2020-04-25