资讯专栏INFORMATION COLUMN

PHP学习 Day 3 语言参考

sean / 831人阅读

摘要:扫下手册的语言参考。允许的强制转换有。错误控制置于表达式前时,忽略该表达式产生的错误信息。运行外部程序使用反引号,效果等同于函数。文件未找到时,给出错误,而仅仅给出警告。目标位置用目标名称加上冒号标记,必须位于同一文件和作用域。

扫下手册的语言参考。(函数以前)

类型

booleanintegerfloatstringarray等类型。

可以通过gettype函数查看类型,如果要同时查看变量的值,则使用var_dump

Boolean

以下值为FALSE:

FALSE

0

0.0

"" 和 "0"

[]

不包括任何成员变量的对象

NULL (包括尚未赋值的变量)

从没有任何tags的 XML 文档生成的 SimpleXML 对象

大致上,0和空都是假的。

字符串

支持单引号、双引号、Heredoc和Nowdoc。

字符串可以当成字符组成的数组用,即可以用整数作index。

字符串可以参与算术!

$foo = 1 + "10.5"; // $foo is float (11.5)
$foo = 1 + "10 Small Pigs"; // $foo is integer (11)

操作文本的函数对于字符串编码的假定非常混乱!请参考手册。

类型强制转换

上面字符串参与算术的例子就是类型自动转换。下面是一个强制转换的例子。

$foo = 10;   // $foo is an integer
$bar = (bool) $foo;   // $bar is a boolean

允许的强制转换有 int bool float string array object unset binary

变量

默认赋值是传递变量的值,添加&符号为引用赋值。

global声明全局变量,用static声明静态变量(仅在函数第一次调用时初始化)。

支持变量的值作为变量名,例如:

$a = "hello";
$$a = "world";

这将导致如下语句等效:

echo "$a ${$a}";
echo "$a $hello";

支持一些来自PHP外部的变量,例如_GET _POST _COOKIE

常量

PHP的常量通过define()函数或者const关键字来定义。前面没有美元符号。

PHP的常量很弱,只能包含boolenintegerfloatstring

算术

除法运算符总是返回浮点数,除非是用于能够整除的整数。

比较

=====的区别是是否自动类型转换。
用于数组时,===还要求顺序相同。

错误控制

@置于表达式前时,忽略该表达式产生的错误信息。

运行外部程序

使用反引号,效果等同于函数shell_exec

$output = `ls -al`;
递增、递减

支持C风格的奇技淫巧:++$a $a++ --$a $a--

逻辑运算符

支持xor!,同时支持andor&&||(优先级略有差异)。

字符串

.连接字符串,用.=将右边的参数附加到左边参数之后。

联合数组

使用+,把右边的数组元素附加到左边的数组后面,两个数组中都有的键名,则只用左边数组中的,右边的被忽略。

流程控制

do while在循环结束后判断,所以至少运行一次!

for的用法和python不一样,和C类似。和python的for相似的是foreach:Python下的for i in lfor k,v in d,PHP下写成foreach ($l as $i)foreach ($d as $k => $v)。注意,通过引用赋值可以方便地修改数组中的元素。

$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}

break可以接受数字参数决定跳出几重循环。

switch比较奇怪,如果case的语句段不加break,会继续执行下一个case中的语句(即使下一个case不满足条件)。当然这也意味着某些时候可以缩短代码:

switch ($_SESSION["lang"]) {
case "en":
case "es":
case "zh-tw":
case "zh-cn":
    $lang_file = "lang.".$_SESSION["lang"].".php";
    break;

default:
    $lang_file = "lang.en.php";
}

不过其实如果switchcase支持一般表达式的话,完全可以写得更简单的:

switch ($_SESSION["lang"]) {
  case ("en" | "es" | "zh-tw" | "zh-cn"):
    $lang_file = "lang.".$_SESSION["lang"].".php";
    break;
  default:
    $lang_file = "lang.en.php";
}

可惜的是上面的php是非法的,因为 case 表达式只能是数字或字符串!

require

requireinclude类似,包含的文件继承了所在行的变量范围。若未给出路径,优先在include_path中查找,没找到的情况下才在调用脚本所在目录和当前工作目录下查找。

文件未找到时,require给出错误,而include仅仅给出警告。

require_onecinclude_once确保文件只被包含一次。

goto

目标位置用目标名称加上冒号标记,必须位于同一文件和作用域。


习题答案

基本的文件读写和正则。


const FILE_NAME = "city.txt"; const NEW_FILE = "area.txt"; $city_list = explode(" ", file_get_contents(FILE_NAME)); $result = implode(" ", preg_grep("/[0-9]/", $city_list, PREG_GREP_INVERT)); file_put_contents(NEW_FILE, $result);

Day 0 - 5 列表

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/20638.html

相关文章

  • PHP学习 Day 4 语言参考(下半篇)

    摘要:如果有此需要,同样要使用匿名函数。以上两点可以总结为函数对应于常量,匿名函数对应于变量。匿名函数生成类的实例类声明通过表明继承关系,不支持多重继承。覆盖方法时,参数必须保持一致,否则会抛出警告。 函数 函数具有全局作用域,可以定义在一个函数之内而在该函数之外调用。 function foo() { function bar() { echo I dont exist...

    WelliJhon 评论0 收藏0
  • PHP学习之路 目录

    这个系列就暂时告一段落了。这是一个目录。 Day 0 起步 Day 1 基本语法 Day 2 REPL 和 包管理 Day 3 语言参考 Day 4 语言参考(下半篇) Day 5 练手程序

    liaosilzu2007 评论0 收藏0
  • PHP学习 Day 2 REPL 和 包管理

    摘要:包管理试用了,新一代的包管理器,感觉不错。习题答案习题见图书优惠活动,计算需要付的金额。文件读写函数有,表示追加,锁定文件,避免别的进程同时读写。 最新版 Debian Wheezy下的PHP是5.4的,day0时说图方便就装了5.4。但是看文档是5.5的,所以琢磨着还是用最新版算了。 Debian Wheezy有dotdeb.org提供php-5.5。安装很方便。 将下列内容加...

    microelec 评论0 收藏0
  • PHP学习 Day 0 起步

    摘要:记录一下学习的轨迹。起步推荐用最新的。内建服务器这年头大部分语言都支持这一出了。交互式的环境学习方便,推荐下家的是用写的。结尾可以省略,然后可以简写成,于是上面的可以简写成当然像这种一行的,用也成练习题感谢出题搭好环境,写出第一个。 记录一下学习的轨迹。 入门资料 对我而言好的入门资料要符合两个要求: 能够切实帮助以比较正的方式入门 薄 真没找到什么好的入门资料。没有《Di...

    Cruise_Chan 评论0 收藏0
  • Swoole Timer 的应用

    摘要:你好,的协程高性能网络通信引擎,使用语言编写,提供了多种通信协议的网络服务器和客户端模块。可应用于互联网移动通信企业软件网络游戏物联网车联网智能家庭等领域。这篇文章主要分享毫秒精度的定时器。最小时间粒度为毫秒。 你好,Swoole PHP 的协程高性能网络通信引擎,使用 C/C++ 语言编写,提供了多种通信协议的网络服务器和客户端模块。 Swoole 可应用于互联网、移动通信、企业软件...

    fyber 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<