变量类型

PHP中变量的作用域可以分为:超全局(全局变量的特殊类型,在局部范围里可直接使用),全局,局部,静态(是局部变量的特殊类型)
在PHP中,全局变量实际上是静态全局变量,如果不用unset显式的释放,那么等脚本运行结束全局变量才会被释放掉
局部静态变量细分可以是
局部静态函数变量(函数中声明的static变量),局部静态成员变量(类中声明的
static 属性,被所有类实例共享)
局部静态变量只有脚本运行结束才会被自动释放

ECMAScript变量可能包含两种不同类型的数据值:基本类型和引用类型。

超全局变量:在一个脚本的任何作用域里都可以被访问,这些都是PHP内置的

基本类型

复制代码 代码如下:

基本类型指的是简单的数据段,5种基本数据类型:undefined、null、boolean、number、string,基本数据类型是按值访问的,因此可以操作保存在变量中的实际的值。

$GLOBALS
$_SERVER
$_GET
$_POST
$_FILES
$_SESSION(持久化存储)
$_COOKIE(持久化存储)
$_REQUEST
$_ENV

美高梅电子游戏 ,复制变量值

全局变量:声明的变量不在class,function,if等语言结构内部,如果要在class,function,if等语言内部使用,需要用关键词global或者超全局变量$GLOBALS

从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上。例如:

静态变量:
在function中使用关键词static声明的变量,静态变量的值保留直至脚本结束
局部变量:在class,function,if/while/for等结构语句内部声明的变量

var num1 = 5;
var num2 = num1;

1.global关键词和$GLOBALS实例

复制前的变量对象

复制代码 代码如下:

美高梅电子游戏 1

<?php
$a = 0;
function foo()
{
    global $a;
    echo $a;
}
function foo2()
{
    echo $GLOBALS[‘a’];
}

复制后的变量对象

2.static 变量和普通局部变量区别实例

美高梅电子游戏 2

复制代码 代码如下:

引用类型

<?php
function foo1()
{
    $var = 0;
    $var++;
    return $var;
}
echo foo1();
echo foo1();
//输出都是1
function foo ()
{
    static $var = 0;
    $var++;
    return var;
}
echo foo();
echo foo();

引用类型指那些可能由多个值构成的对象,引用类型的值是保存在内存中的对象,JavaScript不允许直接访问内存中的位置,在操作对象时,实际上是在操作对象的引用而不是实际的对象,因此,引用类型的值是按引用访问的。

//第一次输出1 第二次2
3.static 关键词还可以声明静态属性和静态方法
静态属性只能被类调用,而不能被类实例调用
静态方法里不能使用$this,只能用self访问类的静态属性

动态属性

另外理解static变量的一段代码:

引用类型的值,我们可以为其添加属性和方法,也可以改变和删除其属性和方法。如果对象不被销毁或者这个属性不被删除,则这个属性将一直存在,但是我们不能给基本类型的值添加属性。例如:

复制代码 代码如下:

var person = new Object();
person.say = "hello";
alert(person.say); //"hello"

<?php
class t
{
        static $v = 10;
        public function a()
        {
                static $var = 10;
                $var++;
                echo $var . “<br>\n”;
        }
        public static function aa()
        {
                self::$v++;
                echo self::$v . “<br>\n”;
        }
}
$o1 = new t();
$o1->a();//输出11
永利皇宫463官网,www.643.com,永利皇宫463官网 ,$o2 = new t();
$o2->a();//输出12
t::aa();//输出11
$o1->aa();//输出12
$o2->aa();//输出13

复制变量值

从上面的代码中,可知如果一个类成员方法中有静态变量,即使是不同的类实例,他们也会共享这个静态变量,尽管这个静态变量不是类静态成员变量,这点容易让人迷惑。

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章