������Χ

�����ķ�Χ��������������ı�����Ҳ����������Ч��Χ�����󲿷ֵ� PHP ����ֻ��һ�������ķ�Χ����������ķ�Χ���ͬ�������� include �� require ������ļ������磺

<?php
$a 
1;
include 
'b.inc';
?>

������� $a �����ڰ����ļ� b.inc ����Ч�����ǣ����û��Զ��庯���У�һ���ֲ�������Χ�������롣�κ����ں����ڲ��ı�����ȱʡ������������ھֲ�������Χ�ڡ����磺

<?php
$a 
1/* global scope */

function Test()
{
    echo 
$a/* reference to local scope variable */
}

Test();
?>

����ű��������κ��������Ϊ echo ���������һ���ֲ��汾�ı��� $a�������������Χ�ڣ�����û�б���ֵ�������ע�⵽ PHP ��ȫ�ֱ����� C ������һ��㲻ͬ���� C �����У�ȫ�ֱ����ں������Զ���Ч�����DZ��ֲ��������ǡ����������һЩ���⣬��Щ�˿��ܲ�С�ľ͸ı���һ��ȫ�ֱ�����PHP ��ȫ�ֱ����ں�����ʹ��ʱ��������Ϊ global��

global �ؼ���

���ȣ�һ��ʹ�� global �����ӣ�

Example #1 ʹ�� global

<?php
$a 
1;
$b 2;

function 
Sum()
{
    global 
$a$b;

    
$b $a $b;
}

Sum();
echo 
$b;
?>

���Ͻű����������"3"���ں�����������ȫ�ֱ��� $a �� $b ֮�󣬶���һ�������������ö���ָ����ȫ�ְ汾������һ�������ܹ�������ȫ�ֱ�������������PHP û�����ơ�

��ȫ�ַ�Χ�ڷ��ʱ����ĵڶ����취����������� PHP �Զ��� $GLOBALS ���顣ǰ������ӿ���д�ɣ�

Example #2 ʹ�� $GLOBALS ��� global

<?php
$a 
1;
$b 2;

function 
Sum()
{
    
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}

Sum();
echo 
$b;
?>

$GLOBALS ��һ���������飬ÿһ������Ϊһ��Ԫ�أ�������Ӧ��������ֵ��Ӧ���������ݡ�$GLOBALS ֮������ȫ�ַ�Χ�ڴ��ڣ�����Ϊ $GLOBALS ��һ����ȫ�ֱ��������·�����ʾ�˳�ȫ�ֱ������ô���

Example #3 ��ʾ��ȫ�ֱ����������������

<?php
function test_global()
{
    
// �������Ԥ����������� "super"��������Ҫ�� 'global' �ؼ�����ʹ�����ں����ı�����������Ч��
    
global $HTTP_POST_VARS;

    echo 
$HTTP_POST_VARS['name'];

    
// Superglobals ���κη�Χ�ڶ���Ч�����Dz�����Ҫ 'global' ������Superglobals ���� PHP 4.1.0 ����ġ�
    
echo $_POST['name'];
}
?>

ʹ�þ�̬����

������Χ����һ����Ҫ��������̬������static variable������̬�������ھֲ��������д��ڣ���������ִ���뿪��������ʱ����ֵ������ʧ��������������ӣ�

Example #4 ��ʾ��Ҫ��̬����������

<?php
function Test()
{
    
$a 0;
    echo 
$a;
    
$a++;
}
?>

������ûʲô�ô�����Ϊÿ�ε���ʱ���Ὣ $a ��ֵ��Ϊ 0 ����� 0����������һ�� $a++ û�����ã���Ϊһ���˳������������ $a �Ͳ������ˡ�Ҫдһ�����ᶪʧ���μ���ֵ�ļ���������Ҫ������ $a ����Ϊ��̬�ģ�

Example #5 ʹ�þ�̬����������

<?php
function test()
{
    static 
$a 0;
    echo 
$a;
    
$a++;
}
?>

���ڣ����� $a ���ڵ�һ�ε��� test() ����ʱ����ʼ����֮��ÿ�ε��� test() ����������� $a ��ֵ����һ��

��̬����Ҳ�ṩ��һ�ִ���ݹ麯���ķ������ݹ麯����һ�ֵ����Լ��ĺ�����д�ݹ麯��ʱҪС�ģ���Ϊ���ܻ�����ݹ���ȥ������ȷ���г�ֵķ�������ֹ�ݹ顣��������򵥵ĺ����ݹ������ 10��ʹ�þ�̬���� $count ���жϺ�ʱֹͣ��

Example #6 ��̬������ݹ麯��

<?php
function test()
{
    static 
$count 0;

    
$count++;
    echo 
$count;
    if (
$count 10) {
        
test();
    }
    
$count--;
}
?>

Note:

��̬�������԰������������������������������ñ��ʽ�Ľ�����丳ֵ�ᵼ�½�������

Example #7 ������̬����

<?php
function foo(){
    static 
$int 0;          // correct
    
static $int 1+2;        // wrong  (as it is an expression)
    
static $int sqrt(121);  // wrong  (as it is an expression too)

    
$int++;
    echo 
$int;
}
?>

��̬�������ڱ���ʱ�����ġ�

Note:

�ں���֮��ʹ�� global �ؼ��ֲ��������������һ������֮�ڰ����ļ�ʱ��

ȫ�ֺ;�̬����������

�� Zend ���� 1 ������������ PHP4�����ڱ����� static �� global �������������ķ�ʽʵ�ֵġ����磬��һ���������ڲ��� global ��䵼���һ��������ȫ�ֱ���ʵ�����ǽ�����һ����ȫ�ֱ��������á����п��ܵ���Ԥ��֮�����Ϊ����������������ʾ�ģ�

<?php
function test_global_ref() {
    global 
$obj;
    
$obj = &new stdclass;
}

function 
test_global_noref() {
    global 
$obj;
    
$obj = new stdclass;
}

test_global_ref();
var_dump($obj);
test_global_noref();
var_dump($obj);
?>

�������̻������


NULL
object(stdClass)(0) {
}

���Ƶ���ΪҲ������ static ��䡣���ò����Ǿ�̬�ش洢�ģ�

<?php
function &get_instance_ref() {
    static 
$obj;

    echo 
'Static object: ';
    
var_dump($obj);
    if (!isset(
$obj)) {
        
// ��һ�����ø�ֵ����̬����
        
$obj = &new stdclass;
    }
    
$obj->property++;
    return 
$obj;
}

function &
get_instance_noref() {
    static 
$obj;

    echo 
'Static object: ';
    
var_dump($obj);
    if (!isset(
$obj)) {
        
// ��һ������ֵ����̬����
        
$obj = new stdclass;
    }
    
$obj->property++;
    return 
$obj;
}

$obj1 get_instance_ref();
$still_obj1 get_instance_ref();
echo 
"\n";
$obj2 get_instance_noref();
$still_obj2 get_instance_noref();
?>

�������̻������


Static object: NULL
Static object: NULL

Static object: NULL
Static object: object(stdClass)(1) {
["property"]=>
int(1)
}

������ʾ�˵���һ�����ø�ֵ��һ����̬����ʱ���ڶ��ε��� &get_instance_ref() ����ʱ��ֵ��û�б���ס��