gpt4 book ai didi

php - 用PHP学习OO编码,static != 表达式,但是PHP手册上说凡是有值的都是表达式,一头雾水

转载 作者:可可西里 更新时间:2023-11-01 00:10:28 24 4
gpt4 key购买 nike

几天前我开始学习面向对象,我对过程编码还算可以,但显然这还不够,我想成为一个有很多经验和知识的精通编码器,所以首先要完全学习必须是 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++;
}

所以,关于变量作用域的手册说 static $a = 0;很好,而关于表达式的手册说 $a = 5,将是一个表达式。这基本上是一回事,只是 0 而不是 5...

所以我现在有点困惑。

现在表达式到底是什么?我究竟可以或不可以将什么赋值给静态变量? :)

最佳答案

您不能使用非常量 表达式初始化 static 变量。初始化后,您可以分配任何您喜欢的东西。

不同之处在于,static 变量在解析阶段被初始化,即当 PHP 通读源代码以弄清楚什么是什么时。在那个阶段没有代码被执行,PHP 只是读取你想要它做的事情。因此,它不会执行初始化变量的代码。

static $foo = 'bar';

'bar' 是一个常量值,PHP 可以在解析时轻松地将其分配给变量。

static $foo = Bar::baz();

Bar::baz() 是一个需要run 的表达式,PHP 需要定位类,必要时加载它,运行baz( ) 方法,它可以做各种不同的事情...对于 5 + 3md5('bar') 或任何需要实际计算。 PHP 根本不会在解析时做所有这些动态的事情。因此,您不能初始化 static 变量,常量 值除外。

运行时,您可以将任何您喜欢的内容分配给static 变量。一个经常使用的模式是这样的:

static $foo = null;
if ($foo === null) {
$foo = new SomeObject;
}

这会将 SomeObject 的实例保留在 static 变量中,但您不能用它初始化变量。

关于php - 用PHP学习OO编码,static != 表达式,但是PHP手册上说凡是有值的都是表达式,一头雾水,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9029511/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com