PHP
PHP是一种通用开源服务端脚本语言,将程序嵌入到HTML文档中去执行,结果以纯 HTML 形式返回给浏览器
PHP能做什么:
生成动态页面内容
创建、打开、读取、写入文件
收集ajax数据
发送和接收cookie
添加、删除、修改您的数据库中的数据
限制用户访问您的网站上的一些页面
加密数据
安装
环境配置
安装 Web 服务器Apache
安装 PHP
安装MySQL数据库
对于初学者建议使用集成的服务器组件(如:WampServer),它已经包含了 PHP、Apache、Mysql 等服务,免去了开发人员将时间花费在繁琐的配置环境过程。
WampServer下载地址:http://www.wampserver.com/
创建端口
WampServer安装好运行,左键小图标--->apache--->httpd-vhost.conf
复制如下代码,往下写。(//
只是注释,记得删掉)
listen 6666 //端口号
<VirtualHost *:6666> //端口号
ServerName localhost
DocumentRoot D:\katsuki //端口对应url(不可有中文路径、空格)
<Directory "D:\katsuki"> //端口对应url
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
配置完成后,localhost:6666
就到该文件目录下,有index.html就打开
语法
默认文件扩展名是 “.php”。
通常包含 HTML 标签和一些 PHP 脚本代码。
分界标示符
<?php //开始
//...php代码
?> //结束
注释
与js一样,分单行和多行注释
单行注释://
多行注释:/**/
输出语句
echo
可以输出一个或多个字符串(字符串可以包含HTML标签),速度较快,一般用于向前端返回数据
<?php
//输出一个字符
echo "katsuki<br>";
//输出多个字符
echo "kasami", " katsuki", "desu";
?>
print_r
打印关于变量的信息,适用于数组、对象的打印,一般用于测试
var_dump
判断一个变量的类型与长度,并输出变量的数据类型和数值,一般用于测试
变量
命名规则
以 $ 符号开始,后面跟着变量的名称($称为标识符,不属于变量组成部分)
只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
必须以字母或者下划线字符开始
不能包含空格
区分大小写
//PHP 没有声明变量的命令。
//变量在第一次赋值时被创建:
<?php
$txt="katsuki";
$x=18;
$y=10.5;
?>
作用域
全局变量
在函数外部定义的变量,称为全局变量,全局变量可以在任意位置访问
在函数中访问全局变量
//$GLOBALS,为数组
//格式:$GLOBALS[变量名],其中变量名不带$。
<?php
function katsuki(){
//在函数中创建全局变量
$GLOBALS['x'] = 10;
$GLOBALS['y'] = 8;
$GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];
}
katsuki();
echo $y; //输出18
?>
global 关键字
<?php
$x=8;
$y=10;
function katsuki(){
global $x,$y;
$y=$x+$y;
}
katsuki();
echo $y; // 输出 18
?>
局部变量
函数内部声明的变量是局部变量,仅能在函数内部访问
超级全局变量
$GLOBALS
是PHP的一个包含所有全局变量的数组,可以在任意位置使用
$_SERVER
是一个包含了头信息(header)、路径(path)等信息的数组
$_POST / $_GET
被广泛应用于收集表单数据,常用于ajax请求等操作
$_COOKIE
用于收集前端发送过来的cookie数据
$_REQUEST
变量包含了 $_GET
和 $_POST
和 $_COOKIE
的内容
$_SESSION
服务器版cookie
$_FILES
常量
规范
命名规则与变量一致,但常量名不需要加 $ 修饰符。
常量值被定义后,在脚本的其他任何地方都不能被改变。
默认是全局作用域,可以在整个运行的脚本的任何地方使用。
常量名建议全部大写
格式:
define(name,value)
name:必选参数,常量名称,即标志符。
value:必选参数,常量的值。
define("MY_NAME", "katsuki");
运算符
算术运算符
+, -, *, /, %
取反-,
赋值运算符
递增/递减运算符
比较运算符
等于:x == y
恒等于:x === y
不等于:x != y ,x <> y
不恒等于:x !== y
大于:x > y
小于:x < y
大于等于:x >= y
小于等于:x <= y
逻辑运算符
与:x and y,x && y
或:x or y,x || y
异或:x xor y
非:!x
三元运算符
格式:expr1 ? expr2 : expr3
条件语句
与javascript一致
if语句
switch语句
循环语句
与javascript一致
while
do…while
for
数据类型
String(字符串)
Integer(整型)
Float(浮点型)
Boolean(布尔型)
Array(数组)
Object(对象)
NULL(空值)
String
字符串拼接运算符“.”
<?php
$txt1="kasami";
$txt2="katsuki";
//输出kasami - katsuki
echo $txt1 . " - " . $txt2;
?>
strlen() 获取字符串长度,得到的字符的字节数
mb_strlen() 获取字符串长度
strpos() 查找某个字符在字符串中的索引,如果未找到匹配,则返回 false
<?php
$name = "katsuki";
echo strlen($name);// 7
echo mb_strlen($name); // 7
echo strpos($name,"k"); // 0
$Name = "一姬";//这里一个中文占了3个字节数
echo strlen($Name);// 6
echo mb_strlen($Name); // 2
echo strpos($Name,"姬"); // 3
?>
Array
数组是一个能在单个变量中存储多个值的特殊变量。
类型
数值数组 - 带有数字索引值的数组
关联数组 - 带有指定的键的数组,每个键关联一个值
多维数组 - 一般都是外层为数值数组,内层为关联数组(类似于js的数组对象)
创建数组
使用array()函数创建
- 数值数组
<?php
$arr = array("kasami","katsuki");
//Array ( [0] => kasami [1] => katsuki )
print_r($arr);
/*本地路径D:\...\array.php:28:
array (size=2)
0 => string 'kasami' (length=6)
1 => string 'katsuki' (length=7) */
var_dump($arr);
?>
- 关联数组
<?php
$msg = array(
"name" => "katsuki",
"age" => 18
);
?>
- 多维数组
<?php
$arr = array(array(
"name" => "katsuki",
"age" => 18
),array(
"name" => "amane",
"age" => 20
));
echo $arr[0]["name"]; // katsuki
var_dump($arr);
/*
array (size=2)
0 =>
array (size=2)
'name' => string 'katsuki' (length=7)
'age' => int 18
1 =>
array (size=2)
'name' => string 'amane' (length=5)
'age' => int 20
*/
?>
数组方法
count() 获取数组长度
in_array() 判断某个值是否存在数组中
array_slice() 从数组中取出一段
第一个参数放入数组
第二个参数为元素的开始位置,0 = 第一个元素,-2 意味着从数组的倒数第二个元素开始。
第三个参数为返回数组的长度,可选
array_rand() 随机获取索引值
<?php
$arr = array("kasami","katsuki");
echo count($arr);// 2
//echo输出字符串,布尔值输出不了
var_dump(in_array("katsuki",$arr)); // boolean true
echo array_rand($arr); // 0或1
var_dump(array_slice($arr,1)); // katsuki
var_dump(array_slice($arr,-2)); // kasami katsuki
?>
遍历数组
for
一般用于遍历数值数组
<?php
$arr = array("kasami","katsuki");
for($i=0;$i<count($arr);$i++){
echo $arr[$i];
}
// kasamikatsuki
?>
foreach()
一般用于遍历关联数组
<?php
$arr = array(
"name" => "katsuki",
"age" => 18
)
foreach($arr2 as $key => $val){
echo $key.$val." ";
}
// namekatsuki age18
?>
数组排序
sort() 对数组进行升序排列
rsort() 对数组进行降序排列
asort() 根据关联数组的值,对数组进行升序排列
ksort() 根据关联数组的键,对数组进行升序排列
arsort() 根据关联数组的值,对数组进行降序排列
krsort() 根据关联数组的键,对数组进行降序排列
函数
内建函数
PHP 的真正威力源自于它的函数。在 PHP 中,提供了超过 1000 个内建的函数,请参考文档
自定义函数
参数
参数默认值
return返回值
<?php
function add($x,$y){
$total=$x+$y;
return $total;
}
?>
面向对象
类
定义一个类
类使用 class 关键字后加上类名定义。
类名后的一对大括号{}内可以定义变量和方法。
类的变量使用 var 来声明, 变量也可以初始化值。
函数定义类似 PHP 函数的定义,但函数只能通过该类及其实例化的对象访问。
<?php
class Kasami{
// 成员属性
var $name;
var $age = 18;
//成员方法
function setName($name){
$this->name = $name;
}
function getAge(){
return $this->age;
}
}
//实例化对象
$p = new Kasami('katsuki');
?>
调用成员属性/方法
在实例化对象后,我们可以使用‘->’操作该对象调用成员属性/方法
$p->setName('katsuki');
$p->name;
构造函数
__construct构造函数是一种特殊的方法。主要用来在创建对象时初始化对象,写在创建对象的语句中。
class Web{
function __construct( $par1, $par2 ) {
$this->url = $par1;
$this->title = $par2;
}
}
继承
使用关键字 extends 来继承一个类,继承后子类就拥有父类的属性和方法(私有除外),格式如下:
class Katsuki extends Kasami {
// 添加成员函数
function setAge($age){
$this->age = $age;
}
//重写方法
function setName($name){
$this->name = $name;
return $name;
}
}
- 私有属性/方法不能被继承
本地数据操作
文件的读取与写入
fopen(filename,mode)
:打开文件
使用fopen函数打开文件时,你首先需要明确:
打开文件干什么?是读文件中的数据呢,还是将数据写入文件,亦或者读写文件
另外你需要考虑如果文件中已经存在相关数据,你是覆盖原有文件中的数据呢,还是仅仅将新数据添加至文件末尾
文件模式:
r 以只读方式打开文件,从文件头开始读
r+ 以读写方式打开文件,写入时以追加的方式写入文件
w 以写入方式打开文件,从文件头开始写。如果文件不存在则尝试创建,如果文件存在,则先删除文件中的内容
w+ 以读写方式打开文件,从文件头开始读写。如果文件不存在则尝试创建,如果文件存在,则先删除文件中的内容
a 以写入方式打开,从文件末尾开始追加写。如果文件不存在则尝试创建
a+ 以读写方式打开,从文件末尾开始追加写入或者读。如果文件不存在则尝试创建。
fread():读取内容
fwrite():写入内容
fclose():关闭文件,避免资源占用
filesize():读取文件字符长度
//获取文件路径
$path = '../data/katsuki.json'
//以读取模式打开文件
$file = fopen( $path , 'r');
//读取文件内容
$content = fread($file, filesize($path));
//关闭文件,减少资源占用
fclose($file);
直接返回数据
把数组转成字符串
json_encode();
php5.4+ 使用JSON_UNESCAPED_UNICODE防止中文转义
json_decode(json,assoc);
把字符串转成数组/对象
json:待解码的 json string 格式的字符串
assoc:默认false,返回object, 当该参数为 true 时,将返回array