博客
关于我
php手冊,php手冊之變量范圍
阅读量:794 次
发布时间:2023-03-01

本文共 3927 字,大约阅读时间需要 13 分钟。

手册目錄: 語言參考---變量---變量范圍

參考詳情: https://secure.php.net/manual/zh/language.variables.scope.php

評論部分:

1. by warhog@warhog.net

提到在類函數中使用static變量的有趣代碼示例:

public function func_having_static_var($x = NULL) {

static $var = 0;

if ($x === NULL) {

return $var;

}

$var = $x;

}

<$a = new SampleClass(); $b = new SampleClass();

echo $a->func_having_static_var() . "\n";

echo $b->func_having_static_var() . "\n";

//輸出:

// 0

// 0

$a->func_having_static_var(3);

echo $a->func_having_static_var() . "\n";

echo $b->func_having_static_var() . "\n";

// 期望的輸出應該是3,但實際輸出卻是3和3,這表明static變量在方法內作用於整個類和所有實例,而非單一實例。

提示: 放棄在方法內使用static變量,改用函式變量如:function func($x = NULL) {

$this->var = $x;

}

2. by dodothedreamer@gmail.com

指出PHP中塊外訪問變量的特性,例如:if ($j == 1) $a = 4;

echo $a; // 輸出4

3. by Stephen Dewey

提到嵌套函數中的global指紋問題:function b() {

global $var1;

echo $var1;

// 若global $var1不在全局範圍內,將會引發錯誤

}$a('hello');

如果在函數上添加global $var1;並設置$var1 = 'some',將會成功

4. by emartin@sigb.net

提供了一種方法,來處理包含的全局變量:function some_function() {

global $func_variable_names;

// 定義並包含其他文件require_once 'anothertest_include.php';

$created_vars = array_diff_key(get_defined_vars(), $GLOBALS, $func_variable_names, $before_eval_vars);

foreach ($created_vars as $var_name => $value) {

global $$var_name;

extract($created_vars);

5. by danno@wpi.edu

提供了一個與引用相关的有趣示例,並解釋了PHP中引用和賦值的區別:class Obj {

public function __destruct() {

echo 'destruct';

}
function foo() {

global $testvar;

$localvar = new Obj();

$testvar = &$localvar;

}

foo();

var_dump($testvar);

// 輸出: destruct 和 NULL

如果修改為:function foo() {

global $testvar;

$localvar = new Obj();

$testvar = $localvar;

}

此時 $testvar 將指向實例,並在程序結束時才解除引用

6. by jinxidoru@byu.net

提到static變量在類方法中不支持繼承,例如:function Z() {

static $count = 0;

printf("%s: %d\n", get_class($this), ++$count);

}

class B extends A {

public function Z() {

static $count = 0;

printf("%s: %d\n", get_class($this), ++$count);

}

測試將會顯示A和B各自的static變量

7. by moraesdno@gmail.com

指出使用GLOBALS數組比global關鍵字更快

8. Anonymous

提到使用static數組時返回元素的注意事項,例如:return $int++;

function return_copyof_scalar() {

static $v;

if (!$v) $v = 1;

return $v;

}

function return_copyof_arrayelement() {

static $v;

if (!$v) {

$v = array();

$v[0] = 1;

}

return $v[0];

}

9. by info@SyPlex.net

提供了一種將static變量在多個函數中訪問的方法,例如:static $staticVar;

return $staticVar;

function fooCount() {

$ref2static = &$staticVar;

echo $ref2static ++;

}

10. by Jack@soinsincere.com

指出方法內的static變量不能與參數引用結合,但可以使用數組保存參數引用static $my;

if (!$arr) return $my[0];

$my = $arr;

}

11. by ppo@beeznest.net

提供了一個示例,展示包含返回值後變量的訪問范圍$foo = 'aaa'; $bar = include('include.php');

$include.php 中:$foo = 'bbb'; return $foo;

// 期望輸出: aaa/bbb,實際輸出: bbb/bbb

12. by mod

展示class __destruct()方法中的變量置空順序,例如:function __destruct() {

global $g_Obj;

echo "#step 2: "; var_dump($g_Obj);

}

function start() {

global $g_Obj;

echo "#step 1: "; var_dump($g_Obj);

}

$g_Obj = new A(); $g_Obj->start();

13. by huntsbox@pacbell.net

提到嵌套函數中的重復聲明和第一次聲明的重要性,例如:static $first_time = true;

if ($first_time) {

functionsquare($x) {

return $x * $x;

}

$first_time = false;

}

返回 sqrt(square(4) + square(5));

// 輸出正確的平方和平方根值

14. by tomek@pluton.pl

指出static變量可用于數組初始化,但不支持表達式static $var = (some_function('arg'));

static $var = array(1, 'a', 3);

static $var = 2 + 3; // 正確

static $var = new object; // 錫誤

15. by jochen_burkhard@web.de

提到遠程文件中的變量在遠程調用時不可用,建議自行測試$paramVal = 10;

localfile.php 中:echo "remote-value=$paramVal";

// 可能不會得到預期值

本人水平有限,如有錯誤,請及時指正並改正

转载地址:http://fvtfk.baihongyu.com/

你可能感兴趣的文章
php redis(2)
查看>>
PHP Redis分布式锁
查看>>
php session超时时间_php怎么设置session超时时间
查看>>
PHP SOAP模块的使用方法:NON-WSDL模式
查看>>
php Socket通信
查看>>
PHP SPL标准库-迭代器
查看>>
PHP Static延迟静态绑定
查看>>
php str_pad();
查看>>
PHP study 环境变量composer
查看>>
PHP trim() 函数
查看>>
php unicode编码转成unioce字符(中文)
查看>>
php url路径问题和php文件以绝对路径引入
查看>>
PHP WebSehll 后门脚本与检测工具
查看>>
ReentrantLock源码解析
查看>>
PHP XSS攻击防范--如何过滤用户输入
查看>>
php zookeeper实现分布式锁
查看>>
PHP 中 this,self,parent 的区别、用法
查看>>
PHP 中如何高效地处理大规模数据的排序?
查看>>
PHP 之ftp客户端类封装实现
查看>>
php 代码改进
查看>>