[TOC]
在最近使用typecho 中对页面的中的部分功能进行了二次开发,所以将很久不用的php基础知识又重新学了一遍。上一次用还是在2013年用thinks php 开发海淘的电商网站。
0 语法变量
PHP 是一门弱类型语言,不必向 PHP 声明该变量的数据类型,会根据变量的值,自动把变量转换为正确的数据类型。PHP 脚本可以放在文档中的任何位置, 以 <?php 开始,以 ?> 结束:// 单行注释 、/* 多行注释*/ 、echo - 可以输出一个或多个字符串(用,隔开),无返回值[推]、print - 只允许输出一个字符串,返回值总为 1
一 基本数据类型8种
四种标量类型:boolean (布尔型逻辑型)、int (整型)、float (浮点型, 也称作double)、 string (字符串)
两种复合类型:array (数组)、object (对象)
两种特殊类型:resource (资源)、 null (NULL)
二 运算符7种
逻辑运算符:and 与、or 或、xor 异或、&& 与、|| 或、! 非、
算数运算符:+、-、*、/、%、++、--, 加\减\乘\除\求余数\加加\减减
字符串运算符: .左右参数连接,将两个字符串链接起来
赋值运算符:+=、-=、*=、/=、%=、.= 右边参数附加到左边
比较运算符:> 、>= 、< 、<= 、== 等于、!= 不等于、<> 不等于、=== 值或类型全等于、!== 值或类型不等于、1>0?'true':'false' 三元运算
执行运算符:``、shell_exec()
错误抑制符:@
三 流程控制
关键字:break、continue、exit/die、goto
四 变量和函数
1.变量
$ 符号开头,其后是变量的名称,对大小写敏感!(全局变量global $ 、 &$), 变量名必须以字母或者下划线字符开始, 变量名只能包含字母、数字以及下划线(A-z、0-9 和 _ ),
变量名不能包含空格
2.常量
请用define(name,value,nocase) 函数-它的三个参数:(类常量const),name名称必选,value值必选,nocase可选-是否对大小写不敏感 默认是false敏感!
常量在整个脚本中可用
魔术常量:__LINE__ 文件中的当前行号。__FILE__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。如:“ E:\wamp\www\test\index.php ”__DIR__ 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。__FUNCTION__ 函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)__CLASS__ 类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。__TRAIT__ Trait 名包括其被声明的作用区域__METHOD__ 类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)__NAMESPACE__ 当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。
3.作用域
PHP 有四种不同的变量作用域:local 函数内部声明的变量是局部变量,仅能在函数内部访问global 所有函数外部定义的变量,拥有全局作用域。在一个函数中访问一个全局变量,需要使用 global 关键字如: global $x,$y;staticparameter
4.预定义变量
PHP 超级全局变量列表:
- $GLOBALS
- $_SERVER
- $_REQUEST
- $_POST
- $_GET
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
1)超全局对象:$_SERVER
它是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中项目由Web服务器创建。但是不同的服务器提供的项目不一定都是全部项目,有些会忽略,使用时应该查阅相关服务器规范或说明。可以使用这个对象来查阅服务器和客户端的信息。
服务器信息获取
获取主机名:$_SERVER["SERVER_NAME"];
获取服务器软件信息:$_SERVER["SERVER_SOFTWARE"];
获取服务器文件(向客户端返回的文件)根路径:$_SERVER["DOCUMENT_ROOT"];
获取http主机名,结果和获取主机名一样:$_SERVER["HTTP_HOST"];
获取当前脚本(执行该 $_SERVER[......] 语句所在的php文件)的路径:$_SERVER["SCRIPT_NAME"];
获取当前脚本的绝对路径:$_SERVER["SCRIPT_FILENAME"];
获取当前页面路径,结果和 $_SERVER["SCRIPT_NAME"] 一样:$_SERVER["PHP_SELF"];
客户端信息获取
获取客户端信息,一般是浏览器信息:$_SERVER["HTTP_USER_AGENT"];
获取客户端协议头信息:$_SERVER["REMOTE_ADDR"];
获取客户端端口号:$_SERVER["REMOTE_PORT"];
2)$_GET和$_POST的使用
和$_SERVER一样属于全局对象。用于请求获取从前台返回的数据
$_REQUEST包含了$_GET和$_POST两者的作用,所以使用它时,就不用担心method的类型选择的是什么了。
常用的还有$_SERVER["QUEST_STRING"],它可以获取客户端get请求url的?后面所带的参数。
4.函数:定义函数使用function关键字,函数的命名主要有三种方式:
Camel Case:小驼峰命名法,myFunction()
Lower Case:下划线命名法,my_function()
Pascal Case:大驼峰命名法,MyFunction()
function myName($a) {
被执行的函数代码;//默认return null;
}
传参和返回值与其他编程语言一样,只是php的形参都是多了一个$符号,
5、字符串函数:
substr():返回字符串的一部分,
strlen():返回字符串长度,
strpos():查找字符串中某字符第一次出现的位,
strrpos():查找字符串中某字符最后一次出现的位置,
trim():去除首尾空格,
strtoupper():将字符串转为大写,
strtolower():将字符串转为小写,
ucwords():将每个单词的首字母转成大写,
str_replace():替换字符串中所匹配的内容
is_string():判断是不是字符串,
gzcompress():压缩字符串,
gzuncompress():解压字符串
五 数组
表达式:$arr=array(); //数组打印 print_r($arr);
索引数组:$car=array(1,2,3),所以默认从0开始,长度,count($car)
遍历:for($x=0;x<count($car);$x++){}
关联数组:
$age=array("Bill"=>"35","Steve"=>"37","Elon"=>"43");
或者
$age['Bill']="63";$age['Steve']="56";$age['Elon']="47";foreach($age as $x=>$x_value) { echo "Key=" . $x . ", Value=" . $x_value; echo "<br>";}
多维数组:$arr = array(array(1,2),array(3,4))
数组遍历:for、foreach。
数组函数:
array_push($arr,123) 数组末尾添加123
array_pop($arr) 删除数组末尾元素
array_unshift($arr,123) 往数组的开头添加
array_unshift($arr) 删除数组开头元素
sort($arr) 数组排序
六 面向对象
__construct 构造方法__destruct 析构方法
其它包含文件引用:include "xx.php";//没找到文件警告
require "xx.php";//没找到文件警告并退出
面向对象三大特征:封装、继承、多态 。 (抽象)
include_once和require_once 文件只引入一次,重复引入不生效。
1)类:一类事物的统称。和其他面向对象编程语言类似,php通过class关键字声明类,其中一个类包含属性和方法两部分;
2)对象:某类事物的实例,比如人类指类,那单个人就是对象。
public:类内部可以访问,外部可以访问,子类可以访问;
private:类内部可以访问;
protected:类内部可以访问,子类可以访问。
3)构造函数:类中存在默认的构造函数,也可以指定构造函数,用于在实例化对象时指定属性而不是使用默认的属性,构造函数自动执行,无需手动调用。构造函数的的名字是两个下划线。
public function __construct($name,$age){}
4)析构函数:也是自动执行的函数,用于实例化对象之后将类销毁。
public function ___destruct(){}
5)继承:可以通过关键字extends来定义类,被继承的类叫父类,以此继承父类的非private属性和方法。子类也可以用自己的构造函数,同时调用父类的构造函数。
七 session和cookie
session存储是指在服务器环境中的存储。
步骤:
1)使用session存储前必须开启:session_start();
2)设置的时候可以取任意名字:$_SESSION['name'] = value;
3)使用:$getValue = $_SESSION['name'];
4)干掉session:unset($_SESSION['name']);
5)清除所有session:session_destroy()。
注:页面跳转方法:header("Location:page.php");
cookie是存储在浏览器中的。
步骤:
1)设置cookie:setcookie("cookiename",$params,time() +3600);
参数一是cookie名,参数二是要保存为cookie的变量对象,参数三是过期时间。
2)取cookie:通过全局变量$_COOKIE["cookiename"],来取设置存储的cookie;
3)更改cookie和设置一样,通过setcookie来更改:setcookie("cookiename","newvalue",time() + (86400 * 30));
4)删除cookie也是使用setcookie来进行操作,只要将过期时间和设置cookie时对应上即可:setcookie("cookiename",$params,time() - 3600);
5)判断有几个cookie:count($_COOKIE)。
参考文献
https://www.runoob.com/php/php-tutorial.html
https://www.w3cschool.cn/php/php-oop.html