1. PHP 中的变量用一个美元符号后面跟变量名来表示。变量名是区分大小写的。 2. 变量名与 PHP 中其它的标签一样遵循相同的规则。一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线。按照正常的正则表达式,它将被表述为:'[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'。 Note: 在此所说的字母是 a-z,A-Z,以及 ASCII 字符从 127 到 255(0x7f-0xff)。 Note: $this 是一个特殊的变量,它不能被赋值。 例如:
<?php $var = 'right'; $Var = 'wrong'; echo "$var, $Var"; // 输出 "right, wrong" $58b = 'illegality'; // 非法变量名;以数字开头 $_4name = 'legal'; // 合法变量名;以下划线开头 $i博客is = 'legal'; // 合法变量名;可以用中文 ?>
3. PHP 也提供了另外一种方式给变量赋值:引用赋值。改动新的变量将影响到原始变量,反之亦然。使用引用赋值,简单地将一个 & 符号加到将要赋值的变量前(源变量)。 例如:
<?php $one = 'Bo'; // 将 'Bo' 赋给 $one $two = &$one; // 通过 $two 引用 $one $two = "Hello, everyone. My name is $two."; // 修改 $two 变量 echo($one . "<br>"); echo($two); // $one 的值也被修改 ?>
注:只有有名字的变量才可以引用赋值。
<?php$one = 25;$two = &$one; // 合法的引用赋值$three = &(24 * 7); // 非法; 引用没有名字的表达式function testing(){ return 25; }$bar = &test(); // 非法引用?>
例子 | 名称 | 结果 |
---|---|---|
-$a | 取反 | $a 的负值 |
$a + $b | 加法 | $a 和 $b 的和 |
$a - $b | 减法 | $a 和 $b 的差 |
$a * $b | 乘法 | $a 和 $b 的积 |
$a / $b | 除法 | $a 除以 $b 的商 |
$a % $b | 取模 | $a 除以 $b 的余数 |
$a ** $b | 求幂 | $a 的 $b 次方 |
注:除法运算符总是返回浮点数。只有在下列情况例外:两个操作数都是整数(或字符串转换成的整数)并且正好能整除,这时它返回一个整数。
取模运算符的操作数在运算之前都会转换成整数(除去小数部分)。
取模运算符 % 的结果和被除数的符号(正负号)相同。即
b 的结果和 $a 的符号相同。
例如:
<?php echo (10 % 3)."\n"; // output 1 echo (10 % -3)."\n"; // output 1 echo (-10 % 3)."\n"; // output -1 echo (-10 % -3)."\n"; // output -1?>
for
for 循环执行代码块指定的次数。 for 循环的语法是:
for (expression1; expression2; expression3) statement
第一个表达式(expression1)在循环开始前无条件求值(并执行)一次。 expression2 在每次循环开始前求值。如果值为 TRUE,则继续循环,执行嵌套的循环语句。如果值为 FALSE,则终止循环。 expression3 在每次循环之后被求值(并执行)。 每个表达式都可以为空或包括逗号分隔的多个表达式。表达式 expr2 中,所有用逗号分隔的表达式都会计算,但只取最后一个结果。expr2 为空意味着将无限循环下去(和 C 一样,PHP 暗中认为其值为 TRUE)。这可能不像想象中那样没有用,因为经常会希望用有条件的 break 语句来结束循环而不是用 for 的表达式真值判断。 例如:
<?php/* example 1 */for ($i = 1; $i <= 10; $i++) { echo $i; }echo("<br>");/* example 2 */for ($i = 1; ; $i++) { if ($i > 10) { break; } echo $i; }echo("<br>");/* example 3 */$i = 1;for (;;) { if ($i > 10) { break; } echo $i; $i++; }echo("<br>");/* example 4 */for ($i = 1; $i <= 10; print $i, $i++);?>
PHP 也支持用冒号的 for 循环的替代语法。
for (expr1; expr2; expr3): statement; ...endfor;
数组遍历:
<?php/* * 此数组将在遍历的过程中改变其中某些单元的值 */$people = Array( Array('name' => 'Allen', 'salt' => 856412), Array('name' => 'Mrike', 'salt' => 215863) );for($i = 0; $i < count($people); ++$i){ $people[$i]['salt'] = rand(000000, 999999); }?>
上面代码执行较慢,因不停的调用count().可以先把count赋值存储来优化:
<?php$people = Array( Array('name' => 'Kalle', 'salt' => 856412), Array('name' => 'Pierre', 'salt' => 215863) );for($i = 0, $size = count($people); $i < $size; ++$i) { $people[$i]['salt'] = rand(000000, 999999); }?>
while循环
while 循环是 PHP 中最简单的循环类型。它和 C 语言中的 while 表现地一样。while 语句的基本格式是:
while (expr) statement
while语句只要为True则一直重复执行while代码块,表达式的值在每次开始循环时检查,所以即使这个值在循环语句中改变了,语句也不会停止执行,直到本次循环结束。有时候如果 while 表达式的值一开始就是 FALSE,则循环语句一次都不会执行。 while 循环中用花括号括起一个语句组,或者用替代语法:
while (expr): statement ...endwhile;
例如:
<?php/* example 1 */$i = 1;while ($i <= 10) { echo $i++; }echo("<br>");/* example 2 */$i = 1;while ($i <= 10): print $i; $i++;endwhile;?>
do-while
(PHP 4, PHP 5, PHP 7) do-while 循环和 while 循环非常相似,区别在于表达式的值是在每次循环结束时检查而不是开始时。和 while 循环主要的区别是 do-while 的循环语句保证会执行先一次(表达式的真值在每次循环结束后检查),然 while 循环中就不一定了(表达式真值在循环开始时检查,如果一开始就为 FALSE 则整个循环立即终止)。 例如:
<?php$i = 0;do { echo $i; } while ($i > 0);?><?phpdo { if ($i < 5) { echo "i is not big enough"; break; } echo "i is ok"; /* process i */} while(0);?>
0默认False
函数
任何有效的 PHP 代码都有可能出现在函数内部,甚至包括其它函数和类定义。 函数名和 PHP 中的其它标识符命名规则相同。有效的函数名以字母或下划线打头,后面跟字母,数字或下划线。可以用正则表达式表示为:[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*。 函数定义使用"function" 例如:
<?phpfunction one($arg_1, $arg_2, /* ..., */ $arg_n){ echo "Example function.\n"; return $retval; }?>
注:函数无需在调用之前被定义,除非是下面两个例子中函数是有条件被定义时。当一个函数是有条件被定义时,必须在调用函数之前定义。
<?php$makefoo = true;/* 不能在此处调用foo()函数, 因为它还不存在,但可以调用bar()函数。*/bar();if ($makefoo) { function foo() { echo "I don't exist until program execution reaches me.\n"; } }echo("<br>");/* 现在可以安全调用函数 foo()了, 因为 $makefoo 值为真 */if ($makefoo) foo();function bar(){ echo "I exist immediately upon program start.\n"; }?>
函数中的函数
<?phpfunction external(){ function internal() { echo "I don't exist until external() is called.\n"; } }/* 现在还不能调用internal()函数,因为它还不存在 */external();internal();/* 现在可以调用internal()函数了,因为external()函数 的执行使得internal()函数变为已定义的函数 */?>
PHP 中的所有函数和类都具有全局作用域,可以定义在一个函数之内而在之外调用,反之亦然。 PHP 不支持函数重载,也不可能取消定义或者重定义已声明的函数。 函数名是大小写无关的,在调用函数的时候,建议使用其在定义时相同的形式是个好习惯。
递归函数
<?phpfunction recursion($a){ if ($a < 20) { echo "$a\n"; recursion($a + 1); } } recursion(1);?>
匿名函数
匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。
<?phpecho preg_replace_callback('~-([a-z])~', function ($match) { return strtoupper($match[1]); }, 'hello-world');// 输出 helloWorld?>
闭包函数也可以作为变量的值来使用。PHP 会自动把此种表达式转换成内置类 Closure 的对象实例。把一个 closure 对象赋值给一个变量的方式与普通变量赋值的语法是一样的,最后也要加上分号: Example #2 匿名函数变量赋值示例
<?php$greet = function($name){ printf("Hello %s\r\n", $name); };$greet('World');$greet('PHP');?>
闭包可以从父作用域中继承变量。 任何此类变量都应该用 use 语言结构传递进去。 PHP 7.1 起,不能传入此类变量: superglobals、 $this 或者和参数重名。
面向对象
在面向对象的程序设计(英语:Object-oriented programming,缩写:OOP)中,对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象。 在现实世界里我们所面对的事情都是对象,如计算机、电视机、自行车等。 对象的主要三个特性: 对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为。 对象的形态:当施加那些方法是对象如何响应,颜色,尺寸,外型。 对象的表示:对象的表示就相当于身份证,具体区分在相同的行为与状态下有什么不同。 比如 Animal(动物) 是一个抽象类,我们可以具体到一只狗跟一只羊,而狗跟羊就是具体的对象,他们有颜色属性,可以写,可以跑等行为状态。 ![对象](http://www.runoob.com/wp-content/uploads/2016/05/animals.png)
面向对象内容
类 − 定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作。
对象 − 是类的实例。
成员变量 − 定义在类内部的变量。该变量的值对外是不可见的,但是可以通过成员函数访问,在类被实例化为对象后,该变量即可称为对象的属性。
成员函数 − 定义在类的内部,可用于访问对象的数据。
继承 − 继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
父类 − 一个类被其他类继承,可将该类称为父类,或基类,或超类。
子类 − 一个类继承其他类称为子类,也可称为派生类。
多态 − 多态性是指相同的函数或方法可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。
重载 − 简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。
抽象性 − 抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。
封装 − 封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。
构造函数 − 主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。
析构函数 − 析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做”清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。
PHP 类定义
<?phpclass phpClass { var $var1; var $var2 = "constant string"; function myfunc ($arg1, $arg2) { [..] } [..] }?>
解析如下: 类使用 class 关键字后加上类名定义。 类名后的一对大括号({})内可以定义变量和方法。 类的变量使用 var 来声明, 变量也可以初始化值。 函数定义类似 PHP 函数的定义,但函数只能通过该类及其实例化的对象访问。 实例
<?phpclass Site { /* 成员变量 */ var $url; var $title; /* 成员函数 */ function setUrl($par){ $this->url = $par; } function getUrl(){ echo $this->url . PHP_EOL; } function setTitle($par){ $this->title = $par; } function getTitle(){ echo $this->title . PHP_EOL; } }$runoob = new Site;$taobao = new Site;$google = new Site;// 调用成员函数,设置标题和URL$runoob->setTitle( "菜鸟教程" );$taobao->setTitle( "淘宝" );$google->setTitle( "Google 搜索" );$runoob->setUrl( 'www.runoob.com' );$taobao->setUrl( 'www.taobao.com' );$google->setUrl( 'www.google.com' );// 调用成员函数,获取标题和URL$runoob->getTitle();$taobao->getTitle();$google->getTitle();$runoob->getUrl();$taobao->getUrl();$google->getUrl();?>
变量 $this 代表自身的对象。 PHP_EOL 为换行符。 类创建后,我们可以使用 new 运算符来实例化该类的对象:
The above is the detailed content of PHP-Expedition. For more information, please follow other related articles on the PHP Chinese website!