目录
二、由于PHP可以在不同平台上运行、与几乎所有浏览器兼容、提供广泛的数据库、免费并且易于学习,在服务器上运行高效的优点,因此要使用PHP。
九、if...else语句与switch语句同c语言一样,循环语句中while语句,do...while语句,for语句均与c语言用法一样。下面介绍独特的foreach语句(用于遍历数组):
遍历关联数组:遍历并打印关联数组中的所有值,您可以使用 foreach 循环,如下所示:
十六、$_GET变量(预定义的 $_GET 变量用于收集来method="get" 的表单中的值)
$_POST 变量(预定义的 $_POST 变量用于收集来自 method="post" 的表单中的值)
一、PHP 文件是什么?
- PHP 文件可包含文本、HTML、JavaScript代码和 PHP 代码
- PHP代码在服务器上执行 ,结果以纯 HTML 形式返回给浏览器
- PHP 文件的默认文件扩展名是 ".php"
通过 PHP:1.您不再限于输出 HTML。
2.您可以输出图像、PDF 文件,甚至 Flash 电影。您还可以输出任意的文本,比如 XHTML 和 XML。
3.收集表单数据,发送和接受cookies(cookie其实就是一些数据信息,类型为“小型文本文件”,存储于电脑上的文本文件中。)
4.可以添加、删除、修改您的数据库中的数据,可对自己的网站或数据进行限制或加密,即可以加安全盾。
二、由于PHP可以在不同平台上运行、与几乎所有浏览器兼容、提供广泛的数据库、免费并且易于学习,在服务器上运行高效的优点,因此要使用PHP。
三、PHP基本语法
1.PHP脚本可从文档的任意位置开始,以<?php开始,以?>为结束,在中间写代码。(脚本中通常包含HTML标签)。
2.同c语言一般用分号将每个代码行分隔开,但输出可用echo,print(前者可输入多个字符串且速度快,后者只能输入一条字符串,返回值总是1)。
3.PHP上手快在于对于每个变量只需为$x(x为你要输入的变量名),在给变量第一次赋值时 便被创建,并不要明确变量类型以及声明变量(但同时变量名必须以字母或下划线字符开始,只能包含字母、数字以及下划线如A-z、0-9 和 _,不能包含空格)变量对大小写敏感。
4.print_r
打印关于变量的易于理解的信息,如果给出的是 string、integer 或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。 记住,print_r() 将把数组的指针移到最后边。使用 reset() 可让指针回到开始处。
5.var_dump
此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
6.var_dump 和 print_r 的区别
var_dump 返回表达式的类型与值而 print_r 仅返回结果,相比调试代码使用 var_dump 更便于阅读。
4.PHP 有四种不同的变量作用域:
- local(这是函数内部变量的作用域,只能在函数内部进行访问)
- global(拥有全局作用域,只能在函数外才能访问,可在函数内部写global关键字来访问全局变量)
- static(可以保存函数内部中你不想删除的变量,会保留前一次调用函数时该变量的值)
- parameter(作为函数声明的一部分,存在于参数列表中)
总结:1、定义在函数外部的就是全局变量,它的作用域从定义处一直到文件结尾。
2、函数内定义的变量就是局部变量,它的作用域为函数定义范围内。
3、函数之间存在作用域互不影响。
4、函数内访问全局变量需要 global 关键字或者使用 $GLOBALS[index] 数组
5、在 php 中函数是有独立的作用域,所以局部变量会覆盖全局变量,即使局部变量中没有全局变量相同的变量,也会被覆盖。
四、PHP定界符EOF(定义字符串)
- 1.PHP 定界符 EOF 的作用就是按照原样,包括换行格式什么的,输出在其内部的东西;
- 2.在 PHP 定界符 EOF 中的任何特殊字符都不需要转义(在其中也会解析html格式内容,加不加引号转义符均有效);
- 3.PHP 定界符 EOF
<?php
$name="runoob";
$a= <<<EOF
"abc"$name
"123"
EOF;
// 结束需要独立一行且前后不能空格
echo $a;
?>
"abc"runoob
"123" //此为运行结果。
五、数据类型
1.数据类型有String(字符串),Integer(整型),Float(浮点型),Boolean(布尔型),Array(数组),Object(对象),NULL(空值),Resource(资源类型)(看不懂...)。
2. PHP var_dump() 函数返回变量和数组的数据类型和值,布尔型用于条件判断(true or false)。
3.NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值,NULL 值指明一个变量是否为空值。,同样可用于数据空值和NULL值的区别,可以通过设置变量值为 NULL 来清空变量数据。
4.对象数据类型也可以用于存储数据。在 PHP 中,对象必须声明。首先,你必须使用class关键字声明类对象。类是可以包含属性和方法的结构。然后我们在类中定义数据类型,然后在实例化的类中使用数据类型:
<?php
class Car
{
var $color;
function __construct($color="green") {
$this->color = $color;
}
function what_color() {
return $this->color;
}
}
?>
以上实例中PHP关键字this就是指向当前对象实例的指针,不指向任何其他对象或类。
5.常量:常量是一个简单值的标识符。该值在脚本中不能改变。
一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。
注意: 常量在整个脚本中都可以使用(帮扩函数内部)。
应用:
- name:必选参数,常量名称,即标志符。
- value:必选参数,常量的值。
- case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。
<?php // 区分大小写的常量名 define("GREETING", "欢迎访问 Runoob.com"); echo GREETING; // 输出 "欢迎访问 Runoob.com" echo '<br>'; echo greeting; // 输出 "greeting",但是有警告信息,表示该常量未定义 ?> <?php // 不区分大小写的常量名 define("GREETING", "欢迎访问 Runoob.com", true); echo greeting; // 输出 "欢迎访问 Runoob.com" ?>
六、字符串变量
1.字符串变量用于包含有字符的值。在创建字符串之后,我们就可以对它进行操作了。您可以直接在函数中使用字符串,或者把它存储在变量中。
在下面的实例中,我们创建一个名为 txt 的字符串变量,并赋值为 "Hello world!" 。然后我们输出 txt 变量的值:
<?php
$txt="Hello world!";
echo $txt;
?>
//当您赋一个文本值给变量时,请记得给文本值加上单引号或者双引号。
2.并置运算符 (.) 用于把两个字符串值连接起来。
<?php
$txt1="Hello world!";
$txt2="What a nice day!";
echo $txt1 . " " . $txt2;
?>
//将输出:Hello world! What a nice day!
//在上面的代码中,我们已经使用了两次并置运算符。这是由于我们需要在两个字符串之间插入一个空格。
3.strlen()函数:返回字符串的长度(字节数)可用于结束字符串的结束标志。
strpos()函数:用于在字符串内查找一个字符或一段指定的文本。如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。
<?php
echo strlen("Hello world!");
?>//将输出12
<?php
echo strpos("Hello world!","world");
?>//将输出6
//字符串 "world" 的位置是 6。之所以是 6 而不是 7 的原因是,字符串中第一个字符的位置是 0,而不是 1。
4.对字符串中的单词计数:str_word_count() 函数
<?php
echo str_word_count("Hello world!"); // 输出 2
?>
5.反转字符串:strrev() 函数
<?php
echo strrev("Hello world!"); // 输出 !dlrow olleH
?>
6.替换字符串中的文本:str_replace() 函数
<?php
echo str_replace("world", "Kitty", "Hello world!"); // 输出 Hello Kitty!
?>
七、类型比较
- 松散比较:使用两个等号 == 比较,只比较值,不比较类型。
- 严格比较:用三个等号 === 比较,除了比较值,也比较类型。
八、运算符
1.PHP中算术运算符,赋值运算符,递增/递减运算符。都和c语言中的运算符规则匹配,不再赘述。
2.比较运算符:与c语言不同之处为x===y(绝对等于->如果 x 等于 y,且它们类型相同,则返回 true)。
x<>y(不等于),x!==y(不绝对等于->如果 x 不等于 y,或它们类型不相同,则返回 true)。
3.逻辑运算符:x and y等同于x &&y。x or y等同于x || y。x xor y(异或->如果 x 和 y 有且仅有一个为 true,则返回 true)。
4.数组运算符:
5.三元运算符("?:"): 语法格式为(expr1) ? (expr2) : (expr3)
对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。
自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。
6.运算符优先级:&& > = > and、|| > = > or
运算符的优先级口诀:括(号)、单(操作数)、算(术)、移(位)、关(系);位(运算符)、逻(辑)、条(件)、赋(值)、逗(号)。
九、if...else语句与switch语句同c语言一样,循环语句中while语句,do...while语句,for语句均与c语言用法一样。下面介绍独特的foreach语句(用于遍历数组):
foreach ($array as $value)
{
要执行代码;
}
每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值。
<?php
$x=array("Google","Runoob","Taobao");
foreach ($x as $value)
{
echo $value . PHP_EOL;
}
?>//分别输出
//Google
//Runoob
//Taobao
foreach ($array as $key => $value)
{
要执行代码;
}
每一次循环,当前数组元素的键与值就都会被赋值给 $key 和 $value 变量(数字指针会逐一地移动),在进行下一次循环时,你将看到数组中的下一个键与值。
<?php
$x=array(1=>"Google", 2=>"Runoob", 3=>"Taobao");
foreach ($x as $key => $value)
{
echo "key 为 " . $key . ",对应的 value 为 ". $value . PHP_EOL;
}
?>
/*key 为 1,对应的 value 为 Google
key 为 2,对应的 value 为 Runoob
key 为 3,对应的 value 为 Taobao*/
十、数组
array() 函数用于创建数组:类型有三种:
- 数值数组 - 带有数字 ID 键的数组
自动分配 ID 键(ID 键总是从 0 开始):$cars=array("Volvo","BMW","Toyota");
用$cars[数字]来输出你想要的元素。
注意:count() 函数用于返回数组的长度(元素的数量)。可用于for循环。
- 关联数组 - 带有指定的键的数组,每个键关联一个值
关联数组是使用您分配给数组的指定的键的数组。$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
用$cars['键值']来输出:$cars['Peter']得到35.
- 多维数组 - 包含一个或多个数组的数组
-
遍历关联数组:遍历并打印关联数组中的所有值,您可以使用 foreach 循环,如下所示:
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
foreach($age as $x=>$x_value)
{
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
?>
十一、数组排序
- sort() - 对数组进行升序排列(按数组中的元素按照字母升序排列)
- rsort() - 对数组进行降序排列(同上)
- asort() - 根据数组的值,对数组进行升序排列(根据数组的值)
- arsort() - 根据数组的值,对数组进行降序排列
- ksort() - 根据数组的键,对数组进行升序排列(如果是字母的话按字母的顺序排列)
- krsort() - 根据数组的键,对数组进行降序排列
十二、超级全局变量(全部作用域均可作用)类型有:
$GLOBALS — 引用全局作用域中可用的全部变量
<?php
$x = 75;
$y = 25;
function addition() {
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addition();
echo $z;
?>
$GLOBALS 这种全局变量用于在 PHP 脚本中的任意位置访问全局变量(从函数或方法中均可)。 PHP 在名为 $GLOBALS[index] 的数组中存储了所有全局变量。变量的名字就是数组的键。
$_SERVER—保存关于报头、路径和脚本位置的信息
<?php
echo $_SERVER['PHP_SELF'];
echo "<br>";
echo $_SERVER['SERVER_NAME'];
echo "<br>";
echo $_SERVER['HTTP_HOST'];
echo "<br>";
echo $_SERVER['HTTP_REFERER'];
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];
?>
$_REQUEST—用于收集HTML表单提交的数据
PHP $POST 广泛用于收集提交 method="post" 的 HTML 表单后的表单数据。$POST 也常用于传递变量。下面的例子展示了一个包含输入字段和提交按钮的表单。当用户点击提交按钮来提交数据后,表单数据会发送到标签的 action 属性中指定的文件。在本例中,我们指定文件本身来处理表单数据。如果您希望使用另一 个 PHP 页面来处理表单数据,请用更改为您选择的文件名。然后,我们可以使用超全局变量 $_POST 来 收集输入字段的值:
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php
$name = $_POST['fname'];
echo $name;
?>
</body>
</html>
$_GET—可用于收集提交 HTML 表单 (method="get") 之后的表单数据,也可以收集 URL 中的发送的数据
假设我们有一张页面含有带参数的超链接:
<html>
<body>
<a href="test_get.php?subject=PHP&web=W3school.com.cn">测试 $GET</a>
</body>
</html>
当用户点击链接 "测试 $GET",参数 "subject" 和 "web" 被发送到 "test_get.php",然后您就能够通过 $_GET 在 "test_get.php" 中访问这些值了。 下面的例子是 "test_get.php" 中的代码:
<html>
<body>
<?php
echo "在 " . $_GET['web'] . " 学习 " . $_GET['subject'];
?>
</body>
</html>
十三、函数(函数是通过调用函数来执行的)
1.PHP 函数准则:
- 函数的名称应该提示出它的功能
- 函数名称以字母或下划线开头(不能以数字开头)
<?php
function writeName()
{
echo "Kai Jim Refsnes";
}
echo "My name is ";
writeName();
?>//输出My name is Kai Jim Refsnes
2.添加参数
为了给函数添加更多的功能,我们可以添加参数,参数类似变量。
参数就在函数名称后面的一个括号内指定。
<?php
function writeName($fname)
{
echo $fname . " Refsnes.<br>";
}
echo "My name is ";
writeName("Kai Jim");
echo "My sister's name is ";
writeName("Hege");
echo "My brother's name is ";
writeName("Stale");
?>
/*My name is Kai Jim Refsnes.
My sister's name is Hege Refsnes.
My brother's name is Stale Refsnes.*/
如需让函数返回一个值,请使用 return 语句。
<?php
function add($x,$y)
{
$total=$x+$y;
return $total;
}
echo "1 + 16 = " . add(1,16);
?>//输出1 + 16 = 17
十四、魔术常量
__LINE__(文件中的当前行号)应用形式为('._LINE_.'')
<?php
echo '这是第 " ' . __LINE__ . ' " 行';
?>//这是第二行
__FILE__(文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。)应用形式为('_FINE_.')
__DIR__(文件所在的目录,如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__).除非是根目录,否则目录中名不包括末尾的斜杠)
应用形式为('._DIR_.'')
__FUNCTION__(返回该函数被定义时的名字(区分大小写))应用形式为(._FUNCTION_)
__CLASS__(自 PHP 5 起本常量返回该类被定义时的名字(区分大小写),类名包括其被声明的作用区域(例如 Foo\Bar),注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用。当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字)应用形式为(._CLASS_.)
<?php
class test {
function _print() {
echo '类名为:' . __CLASS__ . "<br>";
echo '函数名为:' . __FUNCTION__ ;
}
}
$t = new test();
$t->_print();
?>
/*类名为:test
函数名为:_print*/
__TRAIT__(自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。Trait 名包括其被声明的作用区域(例如 Foo\Bar))
从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。
<?php
class Base {
public function sayHello() {
echo 'Hello ';
}
}
trait SayWorld {
public function sayHello() {
parent::sayHello();
echo 'World!';
}
}
class MyHelloWorld extends Base {
use SayWorld;
}
$o = new MyHelloWorld();
$o->sayHello();
?>
//输出Hello World!
__METHOD__(返回该方法被定义时的名字(区分大小写))
应用形式为('._METHOD_)
__NAMESPACE__(当前命名空间的名称(区分大小写))
应用形式为(',_NAMESPACE_,')
十五、PHP类定义
-
类使用 class 关键字后加上类名定义。
-
类名后的一对大括号({})内可以定义变量和方法。
-
类的变量使用 var 来声明, 变量也可以初始化值。
-
函数定义类似 PHP 函数的定义,但函数只能通过该类及其实例化的对象访问。
<?php class 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; } } ?> //PHP_EOL 为换行符
类创建后,我们可以使用 new 运算符来实例化该类的对象,在实例化对象后,我们可以使用该对象调用成员方法,该对象的成员方法只能操作该对象的成员变量:
<?php class 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(); ?> /*菜鸟教程 淘宝 Google 搜索 www.runoob.com www.taobao.com www.google.com*/
访问控制
PHP 对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。
- public(公有):公有的类成员可以在任何地方被访问。
- protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。
- private(私有):私有的类成员则只能被其定义所在的类访问。
十六、$_GET变量(预定义的 $_GET 变量用于收集来method="get" 的表单中的值)
从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送信息的量也有限制。
何时使用 method="get"?
在 HTML 表单中使用 method="get" 时,所有的变量名和值都会显示在 URL 中。
注释:所以在发送密码或其他敏感信息时,不应该使用这个方法!
然而,正因为变量显示在 URL 中,因此可以在收藏夹中收藏该页面。在某些情况下,这是很有用的。
注释:HTTP GET 方法不适合大型的变量值。它的值是不能超过 2000 个字符的。
$_POST 变量(预定义的 $_POST 变量用于收集来自 method="post" 的表单中的值)
从带有 POST 方法的表单发送的信息,对任何人都是不可见的(不会显示在浏览器的地址栏),并且对发送信息的量也没有限制。
注释:然而,默认情况下,POST 方法的发送信息的量最大值为 8 MB(可通过设置 php.ini 文件中的 post_max_size 进行更改)。
何时使用 method="post"?
从带有 POST 方法的表单发送的信息,对任何人都是不可见的,并且对发送信息的量也没有限制。
然而,由于变量不显示在 URL 中,所以无法把页面加入书签。
PHP $_REQUEST 变量
预定义的 $_REQUEST 变量包含了 $_GET、$_POST 和 $_COOKIE 的内容。
$_REQUEST 变量可用来收集通过 GET 和 POST 方法发送的表单数据。
十七、补充问题
include的用法:include 语句包含并运行指定文件。
1、include和require区别
当要包含的文件不存在时,include产生一个警告(Warning),该语句后面的程序会继续执行;而 require则导致一个致命错误(Fatal error),程序就此终止。
2.die()函数的用法:die() 函数输出一条消息,并退出当前脚本。
该函数是 exit() 函数的别名。
语法
die(status)
参数 | 描述 |
---|---|
status | 必需。规定在退出脚本之前写入的消息或状态号。状态号不会被写入输出。 |
说明
如果 status 是字符串,则该函数会在退出前输出字符串。
如果 status 是整数,这个值会被用作退出状态。退出状态的值在 0 至 254 之间。退出状态 255 由 PHP 保留,不会被使用。状态 0 用于成功地终止程序。
3.php中isset()函数的使用方法:isset()函数用于检测变量是否已设置并且非NULL,具体用法如:【isset($a)】。如果指定变量存在且不为NULL,则返回TRUE,否则返回FALSE。