Mar*_*arc 3 php variables static
我开始学习OO几天就回来,我与程序编码相当确定的,但显然这是不够的,我想成为一个精通编码器有很多的经验和知识,所以首先要完全了解必须OO其次是我认为合适的设计模式.
无论如何,我有一件事我被困住了,我不太关注......
静态变量......我理解静态变量即使包含的函数执行完毕也不会丢失它的值,如果再次执行相同的函数,它将保持它的值,等等.
但是我不明白你现在究竟能分配给静态变量的是什么?关于stackoverflow状态的手册和无数问题,您无法将表达式分配给静态变量.
所以我阅读了PHP手册,找出究竟是什么被认为是表达式?手册的答案是(我引用):
"在PHP中,你写的几乎任何东西都是表达式.定义表达式的最简单但最准确的方法是"任何有价值的东西".
"当你输入"$ a = 5"时,你将'5'分配给$ a.'5',显然,值为5,或者换句话说'5'是表达式"
http://php.net/manual/en/language.expressions.php
现在,当您阅读手册中的变量范围时,他们就是这个例子:
function test()
{
static $a = 0;
echo $a;
$a++;
}
Run Code Online (Sandbox Code Playgroud)
因此,关于变量范围的手册说静态$ a = 0; 很好,而关于表达式的手册说$ a = 5,将是一个表达式.这基本上是一回事,只是0而不是5 ......
所以我现在有点困惑.
现在究竟什么是表达式,我究竟能够或不能分配给静态变量?:)
不能初始化一个static使用可变的非恒定表达.初始化后,您可以为其指定任何内容.
不同之处在于static变量在解析阶段初始化,即PHP读取源代码以确定是什么.在那个阶段没有执行任何代码,PHP只是读取你想要它做的事情.因此,它不会执行代码来初始化变量.
static $foo = 'bar';
Run Code Online (Sandbox Code Playgroud)
'bar'是一个常量值,PHP可以在分析时轻松分配给变量.
static $foo = Bar::baz();
Run Code Online (Sandbox Code Playgroud)
Bar::baz()是一个需要运行的表达式,PHP需要定位类,必要时加载它,运行baz()方法,这可能会做各种不同的东西......相同的5 + 3,md5('bar')或任何需要实际计算的东西.PHP根本不会在分析时完成所有这些动态的东西.因此,你不能初始化一个static与任何东西,但变量不变的值.
在运行时,您可以将任何您喜欢的内容分配给static变量.一个经常使用的模式是这样的:
static $foo = null;
if ($foo === null) {
$foo = new SomeObject;
}
Run Code Online (Sandbox Code Playgroud)
这使实例SomeObject中static的变量,但你不能用它初始化变量.
| 归档时间: |
|
| 查看次数: |
364 次 |
| 最近记录: |