PHP
PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。
PHP 能够做什么?
- PHP 能够生成动态页面内容
- PHP 能够创建、打开、读取、写入、删除以及关闭服务器上的文件
- PHP 能够接收表单数据
- PHP 能够发送并取回 cookies
- PHP 能够添加、删除、修改数据库中的数据
- PHP 能够限制用户访问网站中的某些页面
- PHP 能够对数据进行加密
- 通过 PHP,您可以不受限于只输出 HTML。您还能够输出图像、PDF 文件、甚至 Flash 影片。您也可以输出任何文本,比如 XHTML 和 XML。
PHP基础
语法
PHP 脚本在服务器上执行,然后向浏览器发送回纯 HTML 结果。
1. PHP 脚本可放置于文档中的任何位置。
PHP 脚本以 <?php 开头,以 ?> 结尾:
注释:PHP 语句以分号结尾(;)。PHP 代码块的关闭标签也会自动表明分号(因此在 PHP 代码块的最后一行不必使用分号)。
<!DOCTYPE html>
<html>
<body>
<h1>我的第一张 PHP 页面</h1>
<?php
echo "Hello World!";
?>
</body>
</html>
2 支持三种注释方式
3 变量对大小写敏感
PHP 变量规则:
- 变量以 $ 符号开头,其后是变量的名称
- 变量名称必须以字母或下划线开头
- 变量名称不能以数字开头
- 变量名称只能包含字母数字字符和下划线(A-z、0-9 以及 _)
- 变量名称对大小写敏感($y 与 $Y 是两个不同的变量)
4 向浏览器输出
echo()
printf()
5 PHP数据类型
- 标量数据类型 布尔型 整型 浮点型 字符型
- 符合数据类型:数组 对象
- 6 强制类型转换
(array)
(bool)或(boolean)
(int)或(integer)
(object)
(real)或(double)或(float)
(string)
7 类型自动转换
8 与类型有关的函数
gettype
settype
9 类型标识符函数
标识符
10 变量作用域
局部变量 函数参数 全局变量 静态变量(函数退出时不会丢失值)
$_SERVER
11 表达式
逻辑 比较 位操作都与js类似
拼接符不同 字符串拼接符(.) 拼接赋值操作符(.=)
$a='abc'.'def';//abcdef
$a='abc'+'def'//0 +是赋值操作符
12 字符串插入
- 双引号扩起的字符串 变量和转义序列都会得到相应的解析
单引号 变量和转义序列都不会得到解析
$a=”abc”.”def”;
echo “this is $a”;//this is abcdef
echo ‘this is $a’;//this is $a
函数
1
<?php
$total=22;
$cost=4;
function calcute(&$total,$cost){
$total=$total+$cost;
$cost+=4;
}
calcute($total,$cost);
echo($total." ".$cost);//26,4
?>
- 按值传递参数(把实参的值 传递给形参 形参是实参的拷贝)
这就意味着,函数范围内对这些值的任意改变在函数外部都会被忽略
- 按引用传递参数(把实参的地址传递给形参, 形参和实参是同一个对象)
函数内对参数所做的改变都会体现在函数外
2 函数库
数组
1 创建数组
array(item1,item2.....);
$lang=array("English","Spanish");
关联数组
$lang=array("Spain"=>"Spanish","United"=>"English");
2 list()提取数组
range()预定义范围的值填充数组
3 测试数组
is_array()
4 输出数组
foreach
5添加删除元素
array_unshift(array,mixed ele,....)
array_push()
array_shift()
array_pop()
6 定位数组元素
搜索数组
in_array() 搜索特定值
array_key_exists() 找到指定的键 返回bool值
array_search() 搜索指定的值 返回相应的键
array_keys() 返回一个数组 包含所有的键
array_values()返回一个数组所有值,并提供索引值
7 遍历数组
key() 获取当前数组键
current()获取当前数组值
each()返回数组的当前键值对
next()向下移动数组指针
prev()向上移动数组指针
reset()
end()
array_walk(array,callback())
eg:$fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
function test_print( $value,$key ) {
echo "$value<br>\n";
echo "$key<br>\n";
}
array_walk( $fruits, 'test_print' );
8 确定数组大小和唯一性
count()返回数组中值的总数
array_unique() 删除所有重复值 返回由唯一值组成的数组
array_count_values() 统计数组元素出现的频度
9数组排序
array_reverse() 逆置数组元素顺序
array_flip()置换数组键和值
sort()数组排序
10 合并 拆分 接合和分解数组
array_merge()
面向对象的PHP
1.oop :封装 继承 多态
实例:
<?php
class Site {
/* 成员变量 */
var $url;
var $title;
function __construct( $par1, $par2 ) {
$this->url = $par1;
$this->title = $par2;
}
/* 成员函数 */
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('www.runoob.com', '菜鸟教程');
$taobao = new Site('www.taobao.com', '淘宝');
$google = new Site('www.google.com', 'Google 搜索');
// 调用成员函数,获取标题和URL
$runoob->getTitle();
$taobao->getTitle();
$google->getTitle();
$runoob->getUrl();
$taobao->getUrl();
$google->getUrl();
?>
//变量 $this 代表自身的对象。
PHP_EOL 为换行符。
2.类 对象 属性 常量 方法
属性:
- public 任何位置都能访问
- private 只能在类内部使用 不能由实例化的对象调用 也不能由类的子类使用
- protected 只能在该类及其子类中使用
- abstract
- final 标记为final的方法可以防止被子类覆盖
- static
3 构造函数和析构函数
对象实例化的时候 自动执行构造函数
<?php
class Emplyee{
private $name;
function __construct($Vname){
$this->setName($Vname);
$this->getName();
}
function setName($name){
$this->name=$name;
}
function getName(){
echo $this->name;
}
}
$emply=new Emplyee("salary");
?>
调用父类构造函数
function __construct(){
parent::__construct();
}
调用无关的构造函数
classname::__construct()
析构函数
3 静态类成员 所有类实例共享的属性和方法
静态变量
是只存在于函数作用域的变量, 不过, 在函数执行完成后,这种变量的值不会丢失,也就是说, 在下一次调用这个函数时,变量仍然会记得原来的值. 要将某个变量定义为静态的, 只需要在变量前加上 static 关键字即可.
类中静态元素的使用
在类中, static 关键字有两种主要用法, 一是用来定义静态成员,一是用来定义静态方法. 在类的内部, 可以使用作用域限定符 (::) 来访问不同层次作用域的变量.
静态成员
静态成员是一种类变量, 可以把它看成时属于整个类而不是属于类的某个实例. 与一般的实例变量不同的是, 静态成员只保留一个变量值, 而这个变量值对所有的实例都是有效的, 也就是说, 所有的实例共享这个成员.
$this 只表示类的当前实例, 而 self:: 表示的是类本身,在类之外的代码中不能使用这个操作符,而且它不能识别自己在继承树层次结构中的位置.
也就是说, 在扩展类中使用self 作用域时, self 可以调用基类中声明的方法, 但它调用的总是已经在扩展类中重写的方法. 与$this 不同的是, 在使用静态变量时,必须在作用域限定符后面加上$符号.
在扩展类中, 在基类的方法被重写的情况下,使用 parent 作用域调用定义在基类中的方法.静态成员也可以只属于父类. 如果在子类和父类中同时声明了某个成员,也可以使用parant:: 在子类中访问父类中的变量. 在这种情况下, 父类的静态成员和子类的静态成员保存的是不同的值.
可以在 :: 操作符的左边写上类的名称来静态地访问某个成员, 这样避免创建类的实例. 不仅省略掉实例化类的代码, 而且还会更高效, 因为类的每个实例都会占用一小部分的系统资源.
在使用 :: 操作符访问成员变量时, 需要再次注意对$符号的使用. 因为PHP当前不支持动态的静态变量的使用, 也就是说不支持可变的静态变量. 在使用$this->$var时, 被访问的成员是包含在$var中的变量的值. 而不用$符号访问某个变量实际上查找的是类的某个常量, 而常量是不能通过$this来访问的.
PHP6 中提出的static:: 作用域使我们不再需要使用self:: 和parent::. 当希望指向最终的实现功能的类时, 就可以使用static::, 这个限定符会在代码执行之前立即计算出继承层次机构上最后那个类的成员. 之一过程被称为延迟绑定, 它使我们可以在子类中重写某个静态变量, 并且也可以从某个在父类中声明的函数中反问这个最终成员.
静态方法
静态方法和非静态方法之间有一个重要的区别: 在调用静态方法时, 不再需要拥有类的实例.
静态方法和非静态方法使用原则:
一是如果某个方法中不包含$this 变量, 就应该时静态方法; 如果不需要类的实例, 可能还应该使用静态类, 这样可以免去实例化类的工作. 另, 在静态方法中时不能使用$this 变量的, 因为静态方法不属于某个特定的实例.
PHP中使用作用域限定操作符时, 用变量作为类的名称时不允许的.