- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
几天前我开始学习面向对象,我对过程编码还算可以,但显然这还不够,我想成为一个有很多经验和知识的精通编码器,所以首先要完全学习必须是 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 + 3
、md5('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/
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 3年前关闭。 Improve t
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
我可以从哪里下载 cakephp 1.3 的手册.......? 最佳答案 强烈建议不要下载手册,因为它与开发的方式相同,并且可以改进和更改。但是,我承认需要离线副本,您可以在此处找到有关在哪里查看以
我想使用 GKSession 连接两台设备,其中一台作为服务器,另一台作为客户端。使用此配置我无法使用 GKPeerPickerController。 我在连接两个设备时遇到问题: 仅使用蓝牙:不可能
我花了相当多的时间寻找教程并在 Web 服务目录上实现签名和加密。现在我需要扩展该功能以允许每个用户拥有自己的签名和加密 key 。 出于这个原因,我开始四处寻找一些关于如何使用 WSS4J 拦截器的
使用ggplot2我通常使用geom_text和position=jitter之类的东西来注释我的图。 但是 - 对于一个漂亮的情节,我经常发现手动注释是值得的。如下所示: data2 <- stru
谁能推荐一本好的 ANSI SQL 引用手册吗? 我不一定是指教程,而是当您需要基本或更深入的解释或示例时可以查找的适当引用文档。 目前我正在使用W3Schools SQL Tutorial和 SQL
我正在尝试为我的 CS 1 类(class)编写代码。 代码的要点是编写一个代码,您可以在其中从一百美元的钞票中进行任何金额的找零,我需要归还适当的钞票和硬币。 我必须手动编写 JFrame 如果有人
我正在阅读 shellcoder 的手册。我正在跟踪,但由于某种原因无法让我的 shellcode 运行。我已经编译了该程序 gcc -mpreferred-stack-boundary=2 -m32
我的作业(不是家庭作业,只是“如果你能做到就试试”的事情)是使用位操作来加密和解密 .txt 文件。 这是程序。它成功打开文件进行读/写,但将所有 0 和空格放入 output.txt 文件而不是预期
我在谷歌上搜索了很多关于 C 的不必要结果。我希望能在本地获得最好的 C 手册。我发现引用资料很有用 here.我想自己做笔记并删除手册。 Can I manage it somehow like a
我在这个例子中 w.r.t. shellcoder's handbook(second edition),还有一些关于栈的问题 root@bt:~/pentest# gdb -q sc Readin
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
所以我有一份 PDF 手册,我们正在尝试为其创建可打印的 HTML 版本。我遇到了一些障碍,包括: 100% 缩放与缩小以适合(FF/IE 中的默认设置似乎不同) 只打印一页,后面没有空格页脚(或者甚
当我开始使用 PHP(大约 10 年前)时,最吸引我的是 .chm 格式的手册。我过去常常让“索引”选项卡保持打开状态,然后在其中输入我需要的任何内容,它会引导我进入一个漂亮、简洁但详尽的引用页面。
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我想更好地了解如何使用 LLDB 调试我的 iOS 代码。我经常看到我的同事使用提示进行调试,例如查看变量的值等等。我在哪里可以找到一些关于如何在命令行上使用 LLDB 调试器的文档? 提前致谢。 最
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
Springer 的 Consolidated Ada Reference Manual 2005 Edition (ISO/IEC 8652:2007(E), Ed. 3) 和 Annotated
我遇到过几个关于使用 mysql 连接器/C++ 的文档,其中所有文档都使用不同的函数来完成相同的事情。例如 `sql::mysql::MySQL_Driver *driver; sql::Conne
我是一名优秀的程序员,十分优秀!