PHP-变量

基本变量

$开头,紧跟一个字母或者下划线,之后再跟不限数量的字母、数字、下划线;正则表达为:

[a-zA-Z_\x7f-\xff][0-9a-zA-Z_\x7f-\xff]*

最好初始化变量,未初始化的变量在使用的时候根据上下文取初始值。如boolean环境为false; int 为0;float 为0.0;string 为""; array为空数组;对象为空对象;

<?php
// Unset AND unreferenced (no use context) variable; outputs NULL
var_dump($unset_var);

// Boolean usage; outputs 'false' (See ternary operators for more on this syntax)
echo($unset_bool ? "true\n" : "false\n");

// String usage; outputs 'string(3) "abc"'
$unset_str .= 'abc';
var_dump($unset_str);

// Integer usage; outputs 'int(25)'
$unset_int += 25; // 0 + 25 => 25
var_dump($unset_int);

// Float/double usage; outputs 'float(1.25)'
$unset_float += 1.25;
var_dump($unset_float);

// Array usage; outputs array(1) {  [3]=>  string(3) "def" }
$unset_arr[3] = "def"; // array() + array(3 => "def") => array(3 => "def")
var_dump($unset_arr);

// Object usage; creates new stdClass object (see http://www.php.net/manual/en/reserved.classes.php)
// Outputs: object(stdClass)#1 (1) {  ["foo"]=>  string(3) "bar" }
$unset_obj->foo = 'bar';
var_dump($unset_obj);
?>

预定义变量

下面罗列大写字母的为超全局变量,在任何地方都可以访问;不是大写的是一般的全局变量,在函数内部不能访问。

$GLOBALS 访问文件中的全局变量

function test(){
  $foo = "i am fool";
  echo "access global {$GLOBALS['foo']}\n";   //access global  global foo
  echo "access local {$foo}\n";   //access local i am fool
}
$foo = " global foo";

$_GET 用户GET方法请求的数组
$_POST 用户POST方法请求的数组
$_REQUEST GET 和 POST 方法请求的数组
$_FILES POST方法上传的文件,仅此一个复数形式
$_SERVER 包括了整个请求的信息

用户请求相关,(个人觉的是浏览器发送的请求头中的信息)
HTTP_HOST  用户请求的主机名(域名或者是IP,在浏览器中输入的)
HTTP_ACCEPT 用户可以接受的文件类型
HTTP_ACCEPT_ENCODING 用户可接收的的压缩编码格式
HTTP_ACCEPT_LANGUAGE 用户可以理解的语言
HTTP_USER_AGENT 请求客户端信息
HTTP_COOKIE 请求携带的cookie
//用户请求
REQUEST_METHOD 请求使用的方法
REQUEST_SCHEME 请求的协议 http还是https
REQUEST_URI 请求地址中端口号后面所有的字符串,包括参数
QUERY_STRING GET方法中的参数
REMOTE_ADDR 请求侧的IP,不是私有地址,感觉应该是出口IP地址
REMOTE_PORT 同上,应该是出口端口号
//服务器相关
SERVER_SOFTWARE 服务器的信息
SERVER_ADDR 服务器的IP地址
SERVER_PORT 服务器端的端口号,一般为80
SCRIPT_FILENAME 放问的文件的在服务器的绝对路径
DOCUMENT_ROOT 域名所指向的根路径
下面是完整参考
array(33) {
  ["UNIQUE_ID"]=>
  string(27) "WMardfubhCEAZytbSVp3sAAAAAE"
  ["HTTP_HOST"]=>
  string(14) "h5app.7dyk.com"
  ["HTTP_CONNECTION"]=>
  string(10) "keep-alive"
  ["HTTP_CACHE_CONTROL"]=>
  string(9) "max-age=0"
  ["HTTP_UPGRADE_INSECURE_REQUESTS"]=>
  string(1) "1"
  ["HTTP_USER_AGENT"]=>
  string(108) "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
  ["HTTP_ACCEPT"]=>
  string(74) "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
  ["HTTP_ACCEPT_ENCODING"]=>
  string(19) "gzip, deflate, sdch"
  ["HTTP_ACCEPT_LANGUAGE"]=>
  string(14) "zh-CN,zh;q=0.8"
  ["HTTP_COOKIE"]=>
  string(123) "CNZZDATA1259969345=692633714-1478100153-%7C1479091446; _ga=GA1.2.678844300.1478100268; PHPSESSID=ri7l2mcvoc3ottu14dde1mv4e5"
  ["PATH"]=>
  string(49) "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
  ["SERVER_SIGNATURE"]=>
  string(0) ""
  ["SERVER_SOFTWARE"]=>
  string(52) "Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips PHP/5.4.16"
  ["SERVER_NAME"]=>
  string(14) "h5app.7dyk.com"
  ["SERVER_ADDR"]=>
  string(14) "101.200.85.218"
  ["SERVER_PORT"]=>
  string(2) "80"
  ["REMOTE_ADDR"]=>
  string(13) "114.255.40.10"
  ["DOCUMENT_ROOT"]=>
  string(13) "/var/www/html"
  ["REQUEST_SCHEME"]=>
  string(4) "http"
  ["CONTEXT_PREFIX"]=>
  string(0) ""
  ["CONTEXT_DOCUMENT_ROOT"]=>
  string(13) "/var/www/html"
  ["SERVER_ADMIN"]=>
  string(16) "wuwenqi@7dyk.com"
  ["SCRIPT_FILENAME"]=>
  string(26) "/var/www/html/ama/test.php"
  ["REMOTE_PORT"]=>
  string(5) "30255"
  ["GATEWAY_INTERFACE"]=>
  string(7) "CGI/1.1"
  ["SERVER_PROTOCOL"]=>
  string(8) "HTTP/1.1"
  ["REQUEST_METHOD"]=>
  string(3) "GET"
  ["QUERY_STRING"]=>
  string(8) "name=123"
  ["REQUEST_URI"]=>
  string(22) "/ama/test.php?name=123"
  ["SCRIPT_NAME"]=>
  string(13) "/ama/test.php"
  ["PHP_SELF"]=>
  string(13) "/ama/test.php"
  ["REQUEST_TIME_FLOAT"]=>
  float(1489415029.184)
  ["REQUEST_TIME"]=>
  int(1489415029)
}

$_SESSION PHP默认的session机制中,session数据
$_COOKIE 用户请求携带的coockie信息
php://input 消息体中原始数据

<?php $postdata = file_get_contents("php://input"); ?> 
php://input is not available with enctype="multipart/form-data"

$http_response_headers : 返回消息头,与get_headers(string $url)功能一样

<?php
function get_contents() {
  file_get_contents("http://example.com");
  var_dump($http_response_header);
}
array(9) {
  [0]=>
  string(15) "HTTP/1.1 200 OK"
  [1]=>
  string(35) "Date: Sat, 12 Apr 2008 17:30:38 GMT"
  [2]=>
  string(29) "Server: Apache/2.2.3 (CentOS)"
  [3]=>
  string(44) "Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT"
  [4]=>
  string(27) "ETag: "280100-1b6-80bfd280""
  [5]=>
  string(20) "Accept-Ranges: bytes"
  [6]=>
  string(19) "Content-Length: 438"
  [7]=>
  string(17) "Connection: close"
  [8]=>
  string(38) "Content-Type: text/html; charset=UTF-8"
}

argv 命令行模式,参数的数组, argv[0]为 脚本名
argc 命令行模式,参数的个数,最小值位1,因为脚本名被认为是第一个参数

变量作用域

全局变量

在PHP文件最外层的变量拥有全局作用域,同样作用于include和require文件

<?php
$a = 1;
include 'b.inc';    //b文件中也可以访问$a
?>
函数局部作用域

函数中的变量的作用域仅在函数中,比较严格,内部不能访问外部的全局变量,如果想要访问,需要使用 global 关键字或者是使用超全局变量 $GLOBALS;

<?php
$a = 1;
$b = 2;
function Sum()
{
    global $a, $b;
    $b = $a + $b;   //这两句可以替换为 $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
} 
Sum();
echo $b;  //输出3
?>
static 变量

static 仅能存在于函数局部作用域中,变量只在编译的时候初始化一次,且函数执行后的值仍然保留。static 和 global 都是通过引用实现的

变量的变量

一个变量的值作为另一个变量的名称;用在变量的声明,也可用在对象的属性中,为消除语义分歧,使用{}

<?php

  //You can even add more Dollar Signs

  $Bar = "a";
  $Foo = "Bar";
  $World = "Foo";
  $Hello = "World";
  $a = "Hello";

  $a; //Returns Hello
  $$a; //Returns World
  $$$a; //Returns Foo
  $$$$a; //Returns Bar
  $$$$$a; //Returns a

  $$$$$$a; //Returns Hello
  $$$$$$$a; //Returns World

  //... and so on ...//
?>

常量的定义

类外部定义使用 define("MAX_NUMBER", 10); 5.3以后可以也可以使用const定义,名称区分大小写。
类内部定义使用 const MAX_NUMBER = 10;

class test{
  const MAX_NUMBER = 10;
  function print(){
    echo self::MAX_NUMBER;   //类内部函数调用
  }  
}
echo Test::MAX_NUMBER; 外部访问类的常量

get_defined_constants(boolean categorize) //获取到所有定义的常量,一般category为true,得到的是多维数组,用户定义的在 $constants['user']分类中。

<?php
define("MY_CONSTANT", 1);
print_r(get_defined_constants(true));
?>

输出:

Array
(
    [Core] => Array
        (
            [E_ERROR] => 1
            [E_WARNING] => 2
            [E_PARSE] => 4
            [E_NOTICE] => 8
            [E_CORE_ERROR] => 16
            [E_CORE_WARNING] => 32
            [E_COMPILE_ERROR] => 64
            [E_COMPILE_WARNING] => 128
            [E_USER_ERROR] => 256
            [E_USER_WARNING] => 512
            [E_USER_NOTICE] => 1024
            [E_ALL] => 2047
            [TRUE] => 1
        )

    [pcre] => Array
        (
            [PREG_PATTERN_ORDER] => 1
            [PREG_SET_ORDER] => 2
            [PREG_OFFSET_CAPTURE] => 256
            [PREG_SPLIT_NO_EMPTY] => 1
            [PREG_SPLIT_DELIM_CAPTURE] => 2
            [PREG_SPLIT_OFFSET_CAPTURE] => 4
            [PREG_GREP_INVERT] => 1
        )

    [user] => Array
        (
            [MY_CONSTANT] => 1
        )

)

魔法变量

魔法变量在编译时候初始化(即使是根据代码中的位置决定的),而一般的常量在运行时初始化,下表为9个魔法变量,不区分大小写:

名称 描述
__LINE__ The current line number of the file.
__FILE__ The full path and filename of the file with symlinks resolved. If used inside an include, the name of the included file is returned.
__DIR__ The directory of the file. If used inside an include, the directory of the included file is returned. This is equivalent to dirname(FILE). This directory name does not have a trailing slash unless it is the root directory.
__FUNCTION__ The function name.
__CLASS__ The class name. The class name includes the namespace it was declared in (e.g. Foo\Bar). Note that as of PHP 5.4 CLASS works also in traits. When used in a trait method, CLASS is the name of the class the trait is used in.
__TRAIT__ The trait name. The trait name includes the namespace it was declared in (e.g. Foo\Bar).
__METHOD__ The class method name.
__NAMESPACE__ The name of the current namespace.
ClassName::class The fully qualified class name. See also ::class. 5.5版本以后才可以使用。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • 什么是变量覆盖漏洞 自定义的参数值替换原有变量值的情况称为变量覆盖漏洞 经常导致变量覆盖漏洞场景有:$$使用不当,...
    nice_o阅读 16,229评论 5 2
  • 1.区分大小写 php变量区分大小写,php常量也区分大小写,可以设置为不区分,不建议,而系统关键字不区分。 2....
    海野夏桑阅读 128评论 0 0
  • 1.变量名是区分大小写的 2.一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线。在此...
    我在太行山下阅读 347评论 0 0
  • 变量 自定义变量 PHP变量用$加变量名来表示,注意变量名区分大小写,这意味着,如下两个变量是不一样的。 有效的变...
    波哥教你学阅读 1,783评论 0 2