PHP学习笔记(二)

这篇博文主要介绍一下PHP的基本语法

PHP 标记

当解析一个文件时,PHP 会寻找起始和结束标记,也就是

从 HTML 中分离

凡是在一对开始和结束标记之外的内容都会被 PHP 解析器忽略,这使得 PHP 文件可以具备混合内容。 可以使 PHP 嵌入到 HTML 文档中去,如下例所示。

<p>This is going to be ignored by PHP and displayed by the browser.</p>
<?php echo 'While this is going to be parsed.'; ?>
<p>This will also be ignored by PHP and displayed by the browser.</p>

指令分隔符

同 C 或 Perl 一样,PHP 需要在每个语句后用分号结束指令。一段 PHP 代码中的结束标记隐含表示了一个分号;在一个 PHP 代码段中的最后一行可以不用分号结束。如果后面还有新行,则代码段的结束标记包含了行结束。

<?php
echo "This is a test";
?>

<?php echo "This is a test" ?>

<?php echo 'We omitted the last closing tag';

注释

PHP 支持 C,C++ 和 Unix Shell 风格(Perl 风格)的注释。例如:

<?php
echo "This is a test"; // This is a one-line c++ style comment
/* This is a multi line comment
   yet another line of comment */
echo "This is yet another test";
echo 'One Final Test'; # This is a one-line shell-style comment
?>

类型

Boolean 布尔类型

这是最简单的类型。boolean 表达了真值,可以为 TRUE 或 FALSE。要指定一个布尔值,使用关键字 TRUE 或 FALSE。两个都不区分大小写。

<?php
    $foo = True; // assign the value TRUE to $foo
?>

Integer 整型

一个 integer 是集合 ℤ = {…, -2, -1, 0, 1, 2, …} 中的一个数。整型值可以使用十进制,十六进制,八进制或二进制表示,前面可以加上可选的符号(- 或者 +)。二进制表达的 integer 自 PHP 5.4.0 起可用。要使用八进制表达,数字前必须加上 0(零)。要使用十六进制表达,数字前必须加上 0x。要使用二进制表达,数字前必须加上 0b。

<?php
$a = 1234; // 十进制数
$a = -123; // 负数
$a = 0123; // 八进制数 (等于十进制 83)
$a = 0x1A; // 十六进制数 (等于十进制 26)
?>

Float 浮点型

浮点型(也叫浮点数 float,双精度数 double 或实数 real)可以用以下任一语法定义:

<?php
$a = 1.234; 
$b = 1.2e3; 
$c = 7E-10;
?>

String 字符串

一个字符串 string 就是由一系列的字符组成,其中每个字符等同于一个字节。这意味着 PHP 只能支持 256 的字符集,因此不支持 Unicode 。一个字符串可以用 4 种方式表达:单引号,双引号,heredoc语法结构和nowdoc语法结构。

单引号

定义一个字符串的最简单的方法是用单引号把它包围起来(字符 ‘)。要表达一个单引号自身,需在它的前面加个反斜线(\)来转义。要表达一个反斜线自身,则用两个反斜线(\)。其它任何方式的反斜线都会被当成反斜线本身:也就是说如果想使用其它转义序列例如 \r 或者 \n,并不代表任何特殊含义,就单纯是这两个字符本身。

双引号

如果字符串是包围在双引号(”)中。

Heredoc 结构

第三种表达字符串的方法是用 heredoc 句法结构:<<<。在该运算符之后要提供一个标识符,然后换行。接下来是字符串 string 本身,最后要用前面定义的标识符作为结束标志。

结束时所引用的标识符必须在该行的第一列,而且,标识符的命名也要像其它标签一样遵守 PHP 的规则:只能包含字母、数字和下划线,并且必须以字母和下划线作为开头。

<?php
class foo {
    public $bar = <<<EOT
bar
    EOT;
}
?>
Nowdoc 结构

就像 heredoc 结构类似于双引号字符串,Nowdoc 结构是类似于单引号字符串的。Nowdoc 结构很象 heredoc 结构,但是 nowdoc 中不进行解析操作。这种结构很适合用于嵌入 PHP 代码或其它大段文本而无需对其中的特殊字符进行转义。与 SGML 的

PHP中单引号和双引号的区别

在PHP中,字符串的定义可以使用单引号,也可以使用双引号。但是必须使用同一种单或双引号来定义字符串,如:‘Hello”和“Hello’为非法的字符串定义。

定义字符串时,只有一种引号被视为定义符,即单引号或双引号。于是,如果一个字符串由双引号开始,那么只有双引号被分析器解析。这样,你就可以在双引号串中包含任何其他字符,甚至单引号。下面的引号串都是合法的:

$s = "I am a 'single quote string' inside a double quote string"; 

$s = 'I am a "double quote string" inside a single quote string'; 

$s = "I am a 'single quote string' inside a double quote string"; 

$s = 'I am a "double quote string" inside a single quote string'; 

而串 “Why doesn’t “this” work?” 则会被分为三段。如果在这个串中想要表示出双引号,则可以使用转义符”\”(反斜线),变成 “Why doesn’t \”this\” work?” 即可。

定义字符串变量时,PHP允许我们在双引号串中直接包含字串变量,我们可以发现下面的两个字串的处理结果是相同的。

$full_name = $first_name . ' ' . $last_name; 

$full_name = "$first_name $last_name"; 

单引号串和双引号串在PHP中的处理是不相同的。双引号串中的内容可以被解释而且替换,而单引号串中的内容总被认为是普通字符。

一般情况下两者是通用的,但是” ” 双引号里面的字段会经过编译器解释,然后再当作HTML代码输出。‘ ‘ 单引号里面的不进行解释,直接输出。从字面意思上就可以看出,单引号比双引号要快了。所以如果内部只有纯字符串的时候,用单引号(速度快),内部有别的东西(如变量)的时候,用双号引更好点

PHP引号使用原则:

  1. 字符串的值用引号
  2. PHP中尽量用单引号,HTML代码全部用双引号
  3. 在包含变量的时候,用双引号可以简化操作
  4. 复杂的情况下用大括号包起来
  5. PHP引号还有一个用处就是,有的时候需要用php生成文本文件,换行符\n需要用双引号才能好使,单引号则会直接把\n当成字符输出。

Array 数组

PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。

<?php
$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

// 自 PHP 5.4 起
$array = [
    "foo" => "bar",
    "bar" => "foo",
];
?>

在PHP中, 数组是用一种HASH结构(HashTable)来实现的,(但是PHP手册上说“PHP中的数组实际上是一个有序图。图是一种把values映射到keys的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组来使用,或列表(矢量),散列表(是图的一种实现),字典,集合,栈,队列以及更多可能性。因为可以用另一个PHP数组作为值,也可以很容易地模拟树。”) PHP使用了一些机制, 使得可以在O(1)的时间复杂度下实现数组的增删, 并同时支持线性遍历和随机访问.

PHP中遍历数组的方式汇总:

1.foreach

一个用来遍历数组中数据的最简单有效的方法。

<?php
$colors= array('red','blue','green','yellow');
foreach ($colors as $color){
    echo "Do you like $color? <br />";
    }
?>

2.while

while() 通常和 list(),each()配合使用。

<?php
$colors= array('red','blue','green','yellow');
while(list($key,$val)= each($colors)) {
    echo "Other list of $val.<br />";
    }
?>

3.for()

<?php
$arr= array ("0"=> "zero","1"=> "one","2"=> "two");
for ($i= 0;$i< count($arr); $i++){
    $str= $arr[$i];
    echo "the number is $str.<br />";
    }
?>

4.key()

key()函数返回input_array中位于当前指针位置的键元素。

<?php
$capitals= array("Ohio"=> "Columbus","Towa"=> "Des Moines","Arizona"=> "Phoenix");
echo "<p>Can you name the capitals of these states?</p>";
while($key= key($capitals)) {
    echo $key."<br />";
    next($capitals);
    //每个key()调用不会推进指针。为此要使用next()函数
    }
?>

5.reset()

reset()函数用来将input_array的指针设置回数组的开始位置。如果需要在一个脚本中多次查看或处理同一个数组,就经常使用这个函数,另外这个函数还常用于排序结束时。

<?php
$colors= array('red','blue','green','yellow');
foreach ($colorsas$color){
    echo "Do you like $color? <br />";
}
reset($colors);
while(list($key,$val)= each($colors)) {
    echo "$key=> $val<br />";
}
?>

6.each()

each()函数返回输入数组当前键/值对,并将指针推进一个位置。返回的数组包含四个键,键0和key包含键名,而键1和value包含相应的数据。如果执行each()前指针位于数组末尾,则返回FALSE。

<?php
$capitals= array("Ohio"=> "Columbus","Towa"=> "Des Moines","Arizona"=> "Phoenix");
$s1= each($capitals);
print_r($s1);
?>

7.current(),next(),prev(),end()

current()函数 返回位于targetArray数组当前指针位置的数组值。与next()、prev()、和end()函数不同,current()不移动指针。

next()函数 返回紧接着放在当前数组指针的下一个位置的数组值。

prev()函数 返回位于当前指针的前一个位置的数组值,如果指针本来就位于数组的第一个位置,则返回FALSE。

end()函数 将指针移向targetArray的最后一个位置,并返回最后一个元素。

<?php
$fruits= array("apple","orange","banana");
$fruit= current($fruits); //return "apple"
echo $fruit."<br />";
$fruit= next($fruits); //return "orange"
echo $fruit."<br />";
$fruit= prev($fruits); //return "apple"
echo $fruit."<br />";
$fruit= end($fruits); //return "banana"
echo $fruit."<br />";
?>

对数组遍历速度进行测试,测试的遍历方法为常用的三种for、while、foreach。经过反复多次测试,结果表明,对于遍历同样一个数组,foreach速度最快,最慢的则是while。从原理上来看,foreach是对数组副本进行操作(通过拷贝数组),而while则通过移动数组内部指标进行操作,一般逻辑下认为,while应该比foreach快(因为foreach在开始执行的时候首先把数组复制进去,而while直接移动内部指标。),但结果刚刚相反。原因应该是,foreach是PHP内部实现,而while是通用的循环结构。所以,在通常应用中foreach简单,而且效率高。在PHP5下,foreach还可以遍历类的属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值