毕业设计 之 四 PHP语法学习笔记
作者:20135216
平台:windows10
软件:XAMPP,DreamWeaver
说明:该笔记是对网站编程语言的详细学习
一、PHP基础
0. 关于环境
- Apache
- PHP
- MySQL
1.关于_END标签
- 用途:类似于“”,用于多行输出
- 语法规则:
- <<<_END……_END;
- 注意:用于关闭标签的_END标签必须单独放在一行,这一行中不能添加其他内容(注释也不可以)
- 练习
2.关于局部变量
- 定义:在函数内创建的变量,默认情况下均为局部变量
- 特点:
- 局部变量在函数返回调用处便被清空。同样地,函数外创建的变量对于函数来说只能被非函数的代码访问(要想被函数访问,可以作为参数传递进去)
- 举例
3.全局变量&静态变量
- 定义:所有的代码都能够访问的变量为全局变量;只能在函数内部、下此函数被调用的时候仍然保存着值得变量,称为静态变量
- 语法
- 全局变量:global [变量名]
- 静态变量:static [变量名]
4.PHP类型转换
- (array)转换成数组
- (object)转换成对象
二、PHP函数
1.执行顺序
- 以print(abs(5-8))为例。PHP从内而外执行,先计算5-8,得到-3,然后调用abs(-3)得到3,最后将3转换为字符串再输出
- 返回一个数组
- 用途:从一个函数中得到多个值
- 举例:
2.关于引用
- 引用即在变量前加上&,表示一组值可以被多个函数访问或者修改
- 5.3以后的PHP不再支持这样的引用。出于替代,可以在函数内声明全局变量,便于让函数访问内部变量
3.包含和请求
- include “[.php文件名]”:载入该文件的所有内容
- 进阶版本是include_once “[.php文件名]”:保证一个.php文件只会被载入一次
- 进阶版+是require_once “[.php文件名]”:不仅有进阶版的效果,还会保证导入的是已经存在的文件
4.版本兼容
- 使用function_exits函数,可以检测预定义/自定义的函数是否有效
- 使用phpversion函数,查看代码正运行在哪个版本的PHP上
三、PHP对象
1.对象
- 在使用对象之前,必须使用class关键字定义一个类。类定义包含类名(大小写敏感)、属性以及方法。
- 举例
2.对象克隆
- 举例
$object2 = clone $object1; - 目的
- 避免两个引用指向同一个对象。克隆出来的新实例与原来的实例完全一样
3.方法&静态方法
-
一般方法
<?php
class User
{
public $name,$password;
function get_password()
{
return $this->password;
}
}
?> -
静态方法
静态方法不能访问任何对象属性,只能够被类调用(而不是被对象)
-
示例
<?php
User::pwd_string();//::表示伴随静态方法的自调用
class User
{
static function pwd_string()
{
echo "Please enter your password";
}
}
?>
-
作用域
- public:也是变量默认的属性。
- protected:这些属性及方法只能够被对象的类方法及其子类引用
- private:这些成语只能够被同一个类中的方法引用,而非子类
-
补充
类中的属性可以赋予默认值,这个默认值可以是一个数字或者字符串,但不能够是函数或者表达式
-
类内可以定义常量
<?php
Translate::lookup();
class Translate
{
const ENGLISH = 0;
const SPANISH = 1;
const FRENCH = 2;
}
static function lookup()
{
echo self::SPANISH;//self加上::可以直接引用常量
}
}
?>
4.继承
-
extends操作符
-
示例
-
代码
<?php
$object = new Subscriber;
$object->name = "Fred";
$object->password = "pword";
$object->phone = "012 345 678";
$object->email = "fred@bloggs.com";
$object->display();
class User
{
public $name,$password;
function save_user()
{
echo "Save User code goes here";
}
}
class Subscriber extends User
{
public $phone,$email;
function display()
{
echo "Name:" . $this->name . "<br>";
echo "Pass:" . $this->password . "<br>";
echo "Phone:" . $this->phone . "<br>";
echo "Email:" . $this->email;
}
}
?>
-
-
parent运算符
- 目的:当子类与父类定义了相同名字的方法的时候,子类方法将覆盖父类方法。为了访问父类方法,则可以使用parent方法
- 示例
-
final方法
- 用在父类的方法之前,用于防止子类覆盖父类方法
四、PHP数组
1.赋值
-
数组关键字
用“下标=>值”的方法,将值赋给对应的下标(而不是变量)
-
示例
<?php
$p1 = array("Copier","Inkjet","Laser","Photo");
echo "p1 element:" . $p1[2] . "<br>";
$p2 = array('copier' => "Copier & Multipurpose",
'inkjet' => "Inkjet Printer",
'laser' => "Laser Printer");//这里p1与p2是不同的数组
echo "p2 element: ". $p2['inkjet'] . "<br>";
?>
-
foreach...as循环
-
示例
<?php
$paper = array('copier' => "Copier & Multipurpose",
'inkjet' => "Inkjet Printer",
'laser' => "Laser Printer");
foreach($paper as $item -> $description)
echo "$item:$description<br>";
?> -
说明
- 当PHP遇到foreach语句时,读取数组中的第一个元素并放入as关键字后的变量中,每当控制流返回到foreach语句,下一个元素被放到as关键字中。在所有值都被使用之后,循环结束执行
-
2.函数
is_array函数:检查变量是否为数组
count函数:统计顶层元素数量。如果要知道一个多维数组到底有多少元素,可以使用count($fred,1)(后面那个参数只能是0或1)
-
sort函数:在提供的源数组上直接进行排序,而不返回排序后的新数组。该函数排序成功返回true、排序失败返回false。
- sort($fred,SORT_NUMERIC):强制按照数值排序
- sort($fred,SORT_STRING):强制按照字符串排序
- PS:resort函数按照相反顺序对源数组进行排序
shuffle函数:按照随机顺序排序。也是直接在源数组上排序
-
explode函数:接受一个由单个字符(或者字符串)分割成几个独立项构成的字符串,并将这些项放入一个数组。
-
示例
<?php
$temp = explode(' ',"This is a sentence with seven words");
print_r($temp);
?>
-
-
compact函数
作用:通过变量及其值来创建数组
compact函数需要将接收的变量名用引号引起,不是由$符号开头的变量。
-
示例
<?php
$j = 23;
$temp = "Hello";
$address = "1 Old Street";
$age = 61; print_r(compact(explode(' ','j temp address age')));
?>
-
end与reset函数
- end函数将PHP内部指针移动到数组的最后一个元素 ;rest函数将PHP内部指针移动到数组的第一个元素
- 比如,echo reset($fred);打印fred数组的第一个元素
五、实用PHP技术
1.printf函数
-
转换字符
- %b:二进制整数
- %c:ASCII字符
- %o:八进制整数
- %x:十六进制(小写)数
-
精确度设置
<?php
echo "<pre>";//使得空格能显示
printf("The result is $%15f\n",123.42/12);//将结果填充到15位
printf("The result is $%015f\n",123.42/12);//使用0,将结果填充到15位
printf("The result is $%15.2f\n",123.42/12);//将结果填充到15位,小数点之后精确2位
printf("The result is $%'#15.2f\n",123.42/12);//将结果用#填充到15位,小数点之后精确2位
?>
![](http://i.imgur.com/wbkkRaN.png) -
字符串填充
<?php
echo "<pre>";//使得空格能显示
$h = 'Rasmus';
printf("[%s]\n",$h);//标准格式输出
printf("[%12s]\n",$h);//利用空格右对齐,输出长度为12
printf("[%-12s]\n",$h);//利用空格左对齐
$d = 'Rasmus Lerdorf';
printf("[%12.8s]\n",$d);//右对齐,长度为12,截取8个字符
printf("[%-12.12s]\n",$d);//左对齐,长度为12,截取12个字符
printf("[%-'@12.10s]\n",$d);//左对齐,长度为12,用@填充
?>
![](http://i.imgur.com/R7PbWn4.png) -
使用sprintf
目的:将结果传递给变量而不是浏览器
-
用法
$hexstring = sprintf("%x%x%x",65,127,245);//以字符串形式返回RGB颜色组65,127,245的十六进制值,并将结果保存在$hexstring中
2.日期函数
-
date函数
目的:显示多种格式的日期数据
格式
date($format,$timestamp):第一个参数是一个字符串,指的是格式化标识符;第二个参数是一个Unix时间戳-
举例
<?php
echo date("l F jS , Y - H:ia",time());
//l表示每周的日期全称
//F表示月份
//j表示每月的日期
//S表示每月中日期的后缀
//Y表示年份,四位数
//H表示每天的小时,24小时制,有前导0
//i表示分
//a表示午前或午后
//time()表示当前时间戳
?>
-
checkdate函数
- 目的:检查一个输入的日期是否有效
- 用法:
3.文件函数
首先明确一点,因为编写PHP代码的时候并不知道所要应用的系统是否是大小写敏感的(比如,windows和Mac OS X系统大小写不敏感,而linux和Unix是大小写敏感的),因此要设定为大小写敏感,并将文件一律命名为小写
-
检测文件是否存在
-
用法:
if(file_exits("testfile.txt"))
echo "File exits";
-
-
创建文件
- 用法:
- fopen函数参数'w'表示打开已存在文件或者创建新文件;但是打开已存在的文件会使得原有内容被删除
- 这里我还发现了一个有意思的事情:当我不小心把_END的位置写在两个tab键之后的时候,程序会报错
- 用法:
-
从文件中读取数据
-
fgets:从文件中获取一整行数据
- 举例:
- 举例:
-
fread:从文件中获取多行数据或者多行中的部分数据
- 举例
- 因为我这里用的是中文的“:”,而一个中文字符是4个二进制代码,所以如果只读取八个二进制码的话,引号解析不出来(就是乱码)。然后扩展到10个的话,就可以把“:”读取出来
- 举例
-
-
复制文件
- copy('[原文件]','[新文件]');
-
重命名文件或者目录
- rename('[旧文件名]','[新文件名]');
-
删除文件
- unlink('[原有文件]');
-
更新文件
-
举例
<?php
$fh = fopen("exercise2.txt",'r+') or die("Failed to open file");
$text = fgets($fh);
fseek($fh,0,SEEK_END);
fwrite($fh,$text) or die("Could not write to file"); fclose($fh);
echo "File 'exercise2.txt' successfully update";
?> -
说明
- fseek函数的第二个参数和第三个参数表示文件指针指向的具体位置。第三个参数位置有三种选择:
- SEEK_END:移动到文件末尾
- SEEK_CUR:将文件指针指向当前位置并在此基础上偏移给定的偏移量(向后移动)
- SEEK_SET:将指针移动到第二个参数标识的位置
- fseek函数的第二个参数和第三个参数表示文件指针指向的具体位置。第三个参数位置有三种选择:
-
-
多用户访问时为文件加锁之flock函数
- 目的:将所有用户的文件访问请求排成队列,直到程序释放了锁才解散队列
- 注意:flock函数不为老版本的windows系统支持;此外,flock仅仅对其他调用它的进程上锁,如果修改代码在没有实现flock文件加锁的情况下进入文件并对其进行修改,此时代码所做的修改同样会覆盖处于锁定状态的进程所做的修改
- 举例(对上段代码的改进)
-
读取整个文件
函数:file_get_contents("[文件名]");
补充:除了读取本地文件,还可以从internet服务器上取回一份文件,就像在浏览器张浏览该页面一样
-
举例
<?php
echo file_get_contents("http://www.cnblogs.com/lwr-/p/6349948.html");
?>- 我的Dreamweaver中没有安装flash插件,所以图片没加载出来
-
提交文件
-
代码示例:
<?php
echo <<<_END
<html><head><title>PHP Form Upload</title></head><body>
<form method = 'post' action = 'exercise2.php' enctype = 'multipart/form-data'>
Select file:<input type = 'file' name = 'filename' size = '10'>
<input type = 'submit' value = '上传'>
</form>
_END;
if($_FILES)
{
$name = $_FILES['filename']['name'];
move_uploaded_file($_FILES['filename']['tmp_name'],$name);
echo "Uploaded image '$name'<br /><img src = '$name'>";
}
echo "</body></html>";
?> -
效果
-
解析
- form表单用POST提交数据,将数据提交的目标设定为exercise2.php,并告诉web浏览器用multipart/form data的MIME类型编码
- 表单建立后,下一行输出提示内容“Select File:”,然后需要两个输入。第一个是用于输入文本的文本框,类型定义为file,文件名为filename(宽度为10个字符)。第二个被要求的输入只用于显示“上传”按钮
- 上传的所有文件都被放入$_FILE中;一旦程序意识到有文件被上传,从上传文件的电脑中读取的实际文件名便会被检索出来,并存储到变量$name中。
- move_uploaded_file函数将被上传的文件从临时存储文件位置转移到一个永久存储文件的目录中;将文件原先的名字传递给该函数,一并存储到当前目录中。
- $_FILES数组有五个值
- $_FILES['file']['name']:上传文件的名字
- $_FILES['file']['type']:文件的类型
- $_FILES['file']['size']:文件的大小
- $_FILES['file']['tmp_name']:存储在服务器上临时文件的名字
- $_FILES['file']['error']:上传文件导致的错误代码
-
改进
主要是防止用户的恶意输入,所以对上传文件的类型进行了限制和控制
-
代码
<?php
echo <<<_END
<html><head><title>PHP Form Upload</title></head><body>
<form method = 'post' action = 'exercise2.php' enctype = 'multipart/form-data'>
Select a JPG,GIF,PNG,TIF file:<input type = 'file' name = 'filename' size = '10'>
<input type = 'submit' value = '上传'>
</form>
_END;
if($_FILES)
{
$name = $_FILES['filename']['name'];
switch($_FILES['filename']['type'])
{
case 'image/ipeg':$ext = 'jpg';break;
case 'image/gif':$ext = 'gif';break;
case 'image/png':$ext = 'png';break;
case 'image/tiff':$ext = 'tif';break;
default:$ext = '';break;
}
if($ext)
{
$n = "image.$ext";
move_uploaded_file($_FILES['filename']['tmp_name'],$n);
echo "Uploaded image '$name' as '$n':<br>";
echo "<img src = '$n'>";
}
else
echo "'$name' is not an accepted image file"; }
else echo "No image has been uploaded";
echo "</body></html>";
?>
-
参考
1.书籍
- 《PHP、MySQL与JavaScript学习手册(第4版)》Robin Nixon著,侯荣涛 侯硕楠 韩进 译
2.网址
- PHP date() 函数http://www.w3school.com.cn/php/func_date_date.asp
- PHP教程 http://www.w3school.com.cn/php/