PHP
一、基础语法
本次PHP运行平台采用 Wampserver
1.1 创建PHP脚本
- 在Wampserver目录www文件夹下自定义项目文件project/index.php
- 使用编辑器打开index.php文件
- 首行编写PHP运行标识代码段
<?php ?>
,PHP代码写在此之间
1.2 变量与常量
1.2.1 变量定义
PHP的变量采用 $ 符号进行声明:$val = 'hello';
1.2.2 常量定义
PHP的常量使用 define(‘常量名’,‘常量值’) 进行声明:define('val','hello');
1.2.3 变量定义规则
- 变量以$符号开始,之后书写变量名称
- 变量名必须以字母或下划线字符开始
- 变量名只能包含字母、数字、字符、下划线
- 变量名不可包含空格
- 变量名大小写敏感,区分大小写
1.2.4 变量作用域
- 局部作用域:函数定义的变量,其有效作用域在函数内部
- 全部作用域:在函数外部定义的变量,所有函数可通过global关键字访问
1.3 超全局变量
超全局变量是PHP环境中自带的,是特殊数组变量,在所有作用域中都可以使用,超全局变量格式:$_大写变量名['键名']
<?php
echo $_SERVER['SERVER_NAME'];
?>
1.4 数据类型
1.4.1 字符串类型
代码示例:$type = 'string';
- 在单引号中连接字符变量需要采用字符串连接符 .
<?php
$name = 'Tom';
echo 'My Name is '. $name;
?>
- 获取字符串的指定字符采用索引[ ]
<?php
$string = 'abcdef';
echo string[3];
?>
’ ’ 与 " " 之间的区别:
’ ’ 注重字符串的承载,需要连接字符串变量时,需要借助.连接符
" " 注重字符串与字符串的承载,可直接将字符串与字符串变量一同书写
1.4.2 整型类型
代码示例:$integer = 20;
1.4.3 浮点型类型
代码示例:$float = 20.12;
1.4.4 数组类型
1.4.4.1 一维数组
- 索引数组:可以使用下标为数字索引访问的数组
<?php
$indexArray = ['one','two','three'];
echo indexArray[2];
?>
- 关联数组:以键值对的键名访问的数组
<?php
$keyValArray = ['one' => 'Tom', 'two' => 'jay'];
echo keyValArray['one'];
?>
1.4.4.2 多维数组
包含一个或多个数组的数组为多维数组
<?php
$mutiArray = [
['Tom','man',18],
['jay','woman',28]
]
echo $mutiArray[0][1];
?>
1.4.5 布尔类型
代码示例:$Boolean = 8 >= 10 : true : false
Boolean值转字符串类型:
- true => ‘1’
- false => ‘’
1.5 函数
1.4.1 无参函数
<?php
function hello(){
echo 'hello PHP'
}
?>
1.4.2 带参函数
代码示例:function Hello($name){ echo "hello $name"}
<?php
# 可设置默认值
function hello($name = 'word'){
echo "hello $name"
}
hello('PHP')
?>
1.6 引入文件
1.5.1 include
代码示例:include('new.php');
1.5.2 require
代码示例:require('new.php');
两种类型文件引入方式,在文件加载失败时的区别:
- include会产生一个警告脚本,并继续执行
- require会产生一个致命性错误,并停止执行
1.7 空合并运算符
空合并运算符会判断变量是否存在且值不为NULL,如果是,它就会返回自身的值,否则返回它的第二个操作数。格式:判断变量 ?? 待替换值
<?php
session_start();
if($_SEVER['QUERY_STRING'] == 'noname'){
unset($_SESSION['name']);
}
$name = $_SESSION['name'] ?? '游客'
?>
1.8 文件系统
使用PHP特定方法来读写查改文件
1.8.1 ReadFile文件系统
<?php
$file = 'readme.txt';
if(file_existe($file)){
// 判断文件是否存在
echo readfile($file); // 读取文件内容
echo realpath($file); // 获取文件绝对路径
echo filesize($file); // 获取文件大小
copy($file,'copyfile.txt'); // 复制文件内容
rename($file,'newname.txt'); // 文件重命名
}else {
echo '读取文件不存在';
}
mkdir('php'); // 创建目录
?>
- readfile( ):读取文件内容
- file_existe( ):判断文件是否存在
- realpath( ):获取文件绝对路径
- filesize( ):获取文件大小
- copy(‘复制源文件名’, ‘复制目标文件名’):复制文件内容
- rename(‘重命名文件名’, ‘新文件名’):文件重命名
- mkdir(‘目录名’):创建目录
1.8.2 FOpen文件系统
<?php
$file = 'readme.txt';
$handle = fopen($file,'a+'); // 打开文件授权为文件末尾读写
echo fread($handle,filesize($file)); // 读取设置大小文件
echo fgets($handle); // 读取单行文件内容
echo fgetc($handle); // 读取单个字符文件内容
fwrite($handle,'\nHello PHP'); // 文件末尾写入内容
fclose($handle); // 关闭打开的文件
unlink($file); // 删除文件
?>
- fopen(‘文件名’, ‘操作文件权限’):打开文件并授予文件权限,权限为:
- ’r’:只读方式打开,将文件指针指向文件头
- ’r+’: 读写方式打开,将文件指针指向文件头
- ’w’:写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之
- ’w+’: 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之
- ’a’:写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之
- ’a+’:读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之
- ’x’:创建并以写入方式打开,如果文件已存在,则返回 FALSE 和一个错误。如果文件不存在则尝试创建之
- ’x+’:创建并以读写方式打开,如果文件已存在,则返回 FALSE 和一个错误。
- fread(‘读取文件变量名’, 文件字节):读取被打开文件并设置读取的文件字节大小
- fgets(‘读取文件变量名’):读取单行内容,函数被调用后,文件指针移至下一行
- fgetc(‘读取文件变量名’):读取单个字符,函数被调用后,文件指针移至下一字符
- fclose(‘读取文件变量名’):关闭打开的文件
- unlink(‘文件名’):删除文件
二、高级语法
2.1 面向对象
面向对象(OOP,Object Oriented Programming),是一种基于对象,而非基于函数或过程的软件设计方法。数据结构成为了一个包含属性和方法的对象,对于PHP而言,它既可以面向过程也可以面向对象,可以按照开发需求灵活选择设计方法。
2.2 类 / 对象 / 属性 / 方法
类与对象的关联:
- 类是抽象的,对象是具体的
- 类是一系列拥有相同属性和方法的对象抽象出的集合
- 一个类可对于对个对象
<?php
class Person{
// 声明的类
public $name; // 声明的属性
public function introduction(){
// 声明的方法
return 'My name is ' . $this.name
}
}
$person = new Person(); // 创建的对象
$person -> name = 'Lucy';// 对象属性赋值
echo $person -> introduction(); // My name is Lucy
?>
2.3 构造函数
构造函数是在实例化类的对象时可自行执行的方法,具有构造函数的类,在每次创建对象时可自动调用,来初始化类中定义的属性或方法。
<?php
class User {
public $name;
public $age;
public $sex;
// 构造函数,在创建对象时自动执行,无需手动调用
public function __construct($_name,$_age,$_sex){
$this->name = $_name;
$this->age = $_age;
$this->sex = $sex;
}
public function showInfo(){
return 'My information:' . $this->$name . ' ' .$this->$age . ' ' . $this->sex
}
}
$user = new User('Lucy',20,'女');
?>
2.4 析构函数
析构函数是在某一对象的所有引用都被删除或者当对象被显式销毁时执行,常见执行环境:
- 明确的使用unset函数销毁一个变量
- 脚本运行结束之后,会自动销毁
- 改变对象变量的值,会自动销毁
<?php
class User {
public $name;
public $age;
public $sex;
// 构造函数
public function __construct($_name,$_age,$_sex){
$this->name = $_name;
$this->age = $_age;
$this->sex = $sex;
}
public function showInfo(){
return 'My information:' . $this->$name . ' ' .$this->$age . ' ' . $this->sex
}
// 析构函数
public function __destruct(){
echo '析构函数已执行'
}
}
$user = new User('Lucy',20,'女');
?>
2.5 访问修饰符
访问修饰符是给类中声明的变量授予访问权限,一共有三种访问修饰符:
- public:公共访问权限
- protected:受保护访问权限
- private:私有访问权限
<?php
class User {
// 私有访问权限变量
private $name;
private $age;
public function __construct($_name,$_age) {
$this->name = $_name;
$this->age = $_age;
}
// __get()
public function __get($property) {
if(property_existe($this,$property)) {
return $this->$property;
}
}
//__set()
public function __set($property,$value) {
if(property_existe($this,$property)) {
$this->$property = $value;
}
}
}
$user = new User('Lucy',18);
$user->__set('name','Elly') // 设置私有变量name值
echo $user->__get('name'); // 获取私有变量name值
?>
私有访问权限的变量可通过魔术方法进行获取和设置该变量的值
- __get( )获取私有访问权限变量值
- __set( )设置私有访问权限变量值
2.6 继承
一个类想拥有另一个类定义好的属性和方法,即子类继承父类,这就需要使用继承(extends)的方式实现,
<?php
// 父类
class User {
protected $name;
protected $age;
public function __construct($_name,$_age) {
$this->name = $_name;
$this->age = $_age;
}
}
// 子类
class Programmer extends User {
private $hours;
public function __construct($_name,$_age,$_hours) {
parent::__construct($_name,$_age); // 父类构造函数
$this->hours = $_hours; // 子类构造函数
}
public function work() {
return $this->age . '岁的' . $this->name '程序员已经工作了' . $this->hours . '小时。'
}
}
$programmer = new Programmer('Lucy',22,9);
$work = $programmer->work();
echo $work;
?>
2.7 静态属性与静态方法
通过static关键字修饰的成员属性和成员方法被称为静态属性和静态方法,这些被static修饰的属性和方法也称静态成员,在类中的静态成员是不会被实例化到对象中,即可不通过实例化对象的方式也可以访问到类中的静态成员。
<?php
class User {
public $name;
public $age;
// 静态属性,最小密码长度
public static $minPassLength = 6;
// 静态方法,密码验证
public static function validatePass($pass) {
if(strlen($pass) >= self::$minPassLength){
return true;
}else{
return false;
}
}
$password = '1234';
if(User::validatePass($password)) {
echo '密码验证可通过';
}else {
echo '密码验证不通过';
}
}
?>
- 静态属性使用 self:: 访问
- 静态方法使用 类名:: 访问
转载:https://blog.csdn.net/qq_42873753/article/details/117324186