现在的位置: 首页 > 综合 > 正文

PHP学习之六:语言杂项

2013年09月05日 ⁄ 综合 ⁄ 共 3633字 ⁄ 字号 评论关闭

1 关于引用的解释

在PHP中,引用可以看作是与Linux中的hardlink类似的东西,也叫别名,它与指针是不同的。不同的是PHP中的引用是可以复制的,如$a=&$b; $c=$a;

引用可以使得两个变量指向对一块内容,如$a = &$b;

引用可以传递变量,通过将一个变量传递给函数,函数就可以修改其参数的值。只有变量和new语句才能通过引用传递,对于类变量默认都是按引用传递的。

<?php
function foo(&$var)
{
    $var++;
}

$a=5;
foo($a);
// $a is 6 here
?>

函数可以返回引用。

http://write.blog.csdn.net/postedit/7703091

<?php
class foo {
    public $value = 42;

    public function &getValue() {
        return $this->value;
    }
}

$obj = new foo;
$myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42.
$obj->value = 2;
echo $myValue;                // prints the new value of $obj->value, i.e. 2.
?>

取消引用需要unset被引用的变量即可,此时只是断开所有引用,并不会清空变量的值。

2 预定义变量

$GLOBALS: 包含所有定义的全局变量的信息,键的key为

$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目。此变量中包含以下元素:

    argv 传递给脚本的参数数组,当以get方式调用时,传递的是查询串。

    argc 参数个数

    GATEWAY_INTERFACE  服务器使用CGI规范的版本,如CGI/1.1

    SERVER_ADDR  当前运行脚本的服务器的地址

    SERVER_NAME  当前运行脚本的主机名。

    SERVER_SOFTWARE 服务器标识串,在响应请求时头信息中给出

    SERVER_PROTOCOL  请求页面时协议名称与版本,如HTTP/1.1

    REQUEST_METHOD    请求方法,如GET/HEAD/POST/PUT等

    REQUEST_TIME    请求开始的时间戳

    QUERY_STRING    通过页面访问时的查询字符串

    DOCUMENT_ROOT 当前运行脚本所在的文档根目录

    HTTP_ACCEPT    当前请求头中Accept项的内容

    HTTP_ACCEPT_CHARSET  当前请求头中Accept-Charset的内容

    类似的变量还有:HTTP_ACCEPT_ENCODING,HTTP_ACCEPT_LANGUAGE,HTTP_CONNECTION,HTTP_HOST,HTTP_REFERER,HTTP_USER_AGENT

    HTTPS    若用户通过https访问的话,此变量非NULL

    REMOTE_ADDR/HOST/PORT   浏览当前页面用户的IP地址/主机名/端口

    SERVER_PORT  WWW的服务端口

    PATH_TRANLATED  当前脚本所在文件系统的绝对路径

    SCRIPT_NAME    包含当前脚本的路径

    PATH_INFO    由客户端提供的,跟在脚本名称之后且在查询语句之前的路径信息。例如:http://www.example.com/php/path_info.php/some/stuff?foo=bar 被访问,那么                     
$_SERVER['PATH_INFO'] 将包含
/some/stuff

    REQUEST_URI    用来指定要访问的页面,即主机名后面的部分

    PHP_AUTH_USER/PW  PHP运行在Apache或IIS模块方式下需要用HTTP认证的用户名与密码

$_GET    通过URL传递给当前脚本的变量的数组,其已经过urldecode()处理。

$_POST  通过HTTP POST方法传递给当前脚本的变量的数组

$_FILE  

$_REQUEST    默认情况下包含了$_GET $_POST和$_COOKIE的数组

$_SESSION

$_ENV    通过环境方式传递给当前脚本的变量数组

$_COOKIE    通过HTTP Cookie方式传递给当前脚本的变量的数组

$HTTP_RAW_POST_DATA     包含POST提交的原始数据

$argc 与$argv 包含当前运行于命令行下时传递给当前脚本的参数的数组

  

3 预定义异常

Exception是所有异常的基类,在上一篇文章中有相关的介绍。

另一个异常是ErrorException 定义了错误异常,其用于描述异常的严重程度。

5 上下文选项

PHP提供了一些便利的在各种协议应用场景下的上下文选项,以方便我们使用。

5.1 Socket上下文

bindto  以ip:port的形式提供,用于指示tcp等的连接地址

backlog 整数,表示listen的队列大小

<?php
$opts = array(
    'socket' => array(
        'bindto' => '192.168.0.100:7000',
    ),
);

$context = stream_context_create($opts);

$content = file_get_content('http://www.example.com',false,$context);

echo $content;
?>

5.2 HTTP上下文

method  string

header   string

user_agent   string

content    string

proxy     string

request_fulluri   bool

follow_lodateion    bool

max_redirects     int

protocol_version    float

timeout     float

ignore_errors   bool

<?php

$postdata = http_build_query(
    array(
        'var1' => 'some content',
        'var2' => 'doh'
    )
);

$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postdata
    )
);

$context = stream_context_create($opts);

$result = file_get_contents('http://example.com/submit.php', false, $context);

?>

此外PHP还支持FTP,SSL,CURL等的上下文,具体可以参考文档。

6 协议封装器

PHP内置封装了多种类似URL样式的协议,都可以通过fopen() file_exists()等来访问。用户可以使用stream_wrapper_register()函数注册自定义封装器。

6.1 file://

用于访问本地文件系统,

6.2 http://

<?php
$url = 'http://www.example.com/redirecting_page.php';

$fp = fopen($url, 'r');

$meta_data = stream_get_meta_data($fp);
foreach ($meta_data['wrapper_data'] as $response) {

    /* Were we redirected? */
    if (strtolower(substr($response, 0, 10)) == 'location: ') {

        /* update $url with where we were redirected to */
        $url = substr($response, 10);
    }

}

?>

6.3 php://

PHP提供了一些IO流以供访问PHP自己的输入和输出流,如php://stdin  php://stdout php://stderr,其允许在PHP进程中直接访问各种流。流引用只是一个复本。stdin为只读,dtdout与stderr为可写的。

php://fd支持直接访问指定的文件描述符

php://memory 与php://temp 允许存储临时数据并以文件的方式访问之。

<?php
$file = fopen("php://stdout","rw");
fwrite($file,"hello world\n");
?>

此外还有其他的如ftp:// zlib:// ssh2://  rar:// ogg://等等。

抱歉!评论已关闭.