超全的PHP进阶知识点
目录
前文基础知识
static关键字
预定义常量
引号区别
字符串函数
数组进阶
函数进阶
变量作用域
类进阶
PHP超级全局变量
文件处理
文件属性获取
目录操作
正则表达式
phpstorm报错解决
前文基础知识
超详细的PHP入门知识点讲解_coleak的博客-CSDN博客_php
coleak的PHP知识专栏
static关键字
当一个函数完成时,它的所有变量通常都会被删除。
然而,有时候希望某个局部变量不要被删除。请在第一次声明变量时使用 static 关键字
预定义常量
PHP预定义了许多常量,这些常量无需使用define()函数定义,可直接在程序中使用。下面列举了一些常用的PHP预定义常量。
DIRECTORY_SEPARATOR: 表示目录分隔符,UNIX或Linux操作系统环境时的值为“ / ”, Window操作系统环境时的值为 “ \ ”
PHP_OS: PHP所在的操作系统的类型
<?php
echo __FILE__.PHP_EOL;
echo __LINE__.PHP_EOL;
echo PHP_VERSION.PHP_EOL;
echo PHP_OS.PHP_EOL;
echo DIRECTORY_SEPARATOR.PHP_EOL;
?>
E:\phpproject\mypro1\index.php
3
7.4.22
WINNT
\
引号区别
<?php
$name='coleak';
//双引号里面变量输出变量的值
$str ="这是 $name 的测试";
//单引号里面有变量都作为一个字符串处理
$str1 ='这是 $name 的测试';
echo $str.PHP_EOL;
echo $str1;
?>
字符串函数
trim() 函数移除字符串两侧的空白字符或其他预定义字符。
<?php
$str=' cole ak _xiao ak ';
echo $str." 一共有 ".strlen($str)."字符".PHP_EOL;
echo trim($str).PHP_EOL;
echo strpos($str,'ak').PHP_EOL;
echo substr($str,strpos($str,'ak'),7).PHP_EOL;
$a1=str_replace('a','y',$str);
echo $a1;
?>
cole ak _xiao ak 一共有 18字符
cole ak _xiao ak
6
ak _xia
cole yk _xiyo yk
数组进阶
<?php
$a=[1,2,3,4,'coleak'];
$b=array(1,2,3,4,'coleak');
foreach ($a as $key => $value) {echo '数组第 '.$key.' 个元素的值是:'.$value.PHP_EOL;
}
$num=0;
foreach ($b as $value)
{echo "数组第 $num 个元素的值是: $value ".PHP_EOL;$num++;
}
?>
数组第 0 个元素的值是:1
数组第 1 个元素的值是:2
数组第 2 个元素的值是:3
数组第 3 个元素的值是:4
数组第 4 个元素的值是:coleak
数组第 0 个元素的值是: 1
数组第 1 个元素的值是: 2
数组第 2 个元素的值是: 3
数组第 3 个元素的值是: 4
数组第 4 个元素的值是: coleak
<?php
$cars=array("Volvo","BMW","Toyota");//简单的数组
echo count($cars).PHP_EOL;//count()返回数组的长度
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");//关联数组
//其中包含多个键值对
echo "Peter is " . $age['Peter'] . " years old.".PHP_EOL;
foreach($age as $x=>$value)//关联数组的遍历方法
{echo "Key=" . $x . ", Value=" . $value.PHP_EOL;
}
?>
sort() - 对数组进行升序排列
rsort() - 对数组进行降序排列
asort() - 根据关联数组的值,对数组进行升序排列
ksort() - 根据关联数组的键,对数组进行升序排列
arsort() - 根据关联数组的值,对数组进行降序排列
krsort() - 根据关联数组的键,对数组进行降序排列
数组合并
<?php
$array1 =array('a','b','c');
$array2 = array('a1'=>'php','a2'=>'python','a3'=>'java');
$array3 = array_merge($array1,$array2);
foreach ($array3 as $item=>$value)
{echo "key= $item 的值为 $value".PHP_EOL;
}
array_push($array1,'d','e');
print_r($array1);
?>
key= 0 的值为 a
key= 1 的值为 b
key= 2 的值为 c
key= a1 的值为 php
key= a2 的值为 python
key= a3 的值为 java
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => e
)
下表为空 自动添加参数
<?php
$array1[]='d';
$array1[]='c';
var_dump($array1);
$array1['a4']='javasciprt';
print_r($array1);
?>
array(2) {[0]=>string(1) "d"[1]=>string(1) "c" } Array ([0] => d[1] => c[a4] => javasciprt )
unset 销毁指定的元素
<?php
$array1 = array('a', 'b', 'c', 'd', 'e');
unset($array1[2]);
print_r($array1);
array_pop($array1);
print_r($array1);
$array1[0]='aaa';
print_r($array1);
?>
Array
(
[0] => a
[1] => b
[3] => d
[4] => e
)
Array
(
[0] => a
[1] => b
[3] => d
)
Array
(
[0] => aaa
[1] => b
[3] => d
)
函数进阶
匿名函数
匿名函数就是没有名字的函数。
将一个匿名函数"赋值"给一个变量——此时该变量就代表该匿名函数了
<?php
$callfunction=function($name){return $name;
};
echo $callfunction('coleak');
?>
回调函数
<?php
function Speak($a,$b)
{echo "This is ".$a.PHP_EOL;echo "This is ".$b;
}
function Speak_Test()
{return call_user_func_array('Speak',array('Chinese','English'));
}
Speak_Test()
?>
变量作用域
PHP 有三种不同的变量作用域:
local(局部)
global(全局)
static(静态)
PHP 同时在名为 $GLOBALS[index] 的数组中存储了所有的全局变量。下标存有变量名。这个数组在函数内也可以访问,并能够用于直接更新全局变量。
<?php
$x=5;
$y=10;
function myTest1() {return $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
}
function myTest2()
{global $x,$y;return $x+$y;
}
echo myTest1().PHP_EOL;
echo myTest2();
?>
15
20
类进阶
继承
PHP 使用关键字 extends 来继承一个类,PHP 不支持多继承
接口
使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。接口中定义的所有方法都必须是公有,这是接口的特性。要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。
<?php
interface Demo
{const NAME = 'coleak';const URL = 'http://test.cn/index.html';function fun1();function fun2();
}
class Website implements Demo
{public function fun1(){echo self::NAME;}public function fun2(){echo self::URL;}
}
$obj = new Website();
$obj -> fun1();
echo PHP_EOL;
$obj -> fun2();
?>
常量
可以把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用 $ 符号。
<?php
class MyClass
{const constant = '常量值';var $var1='var1';public $var2="var2";function showConstant() {echo self::constant . PHP_EOL;}function showvars(){self::showConstant();echo $this->var1.PHP_EOL;echo $this->var2;}
}
echo MyClass::constant . PHP_EOL;
$classname = "MyClass";
echo $classname::constant . PHP_EOL; // 自 5.3.0 起
$class = new MyClass();
echo $class::constant . PHP_EOL; // 自 PHP 5.3.0 起
$class->showConstant();
$class->showvars();
?>
常量值
常量值
常量值
常量值
常量值
var1
var2
抽象类
子类方法可以包含父类抽象方法中不存在的可选参数
<?php
abstract class AbstractClass
{abstract protected function prefixName($name);
}
class ConcreteClass extends AbstractClass
{public function prefixName($name, $separator = "."){if ($name == "man") {$prefix = "Mr";} elseif ($name == "woman") {$prefix = "Mrs";} else{$prefix = "";}return "{$prefix}{$separator} {$name}";}
}
$class = new ConcreteClass;
echo $class->prefixName("man"), "\n";
echo $class->prefixName("woman"), "\n";
?>
1. 接口
(1)对接口的使用是通过关键字implements
(2)接口不能定义成员变量(包括类静态变量),能定义常量
(3)子类必须实现接口定义的所有方法
(4)接口只能定义不能实现该方法
(5)接口没有构造函数
(6)接口中的方法和实现它的类默认都是public类型的
2. 抽象类
(1)对抽象类的使用是通过关键字extends
(2)不能被实例化,可以定义子类必须实现的方法
(3)子类必须定义父类中的所有抽象方法,这些方法的访问控制必须和父类中一样(或者更为宽松)
(4)如一个类中有一个抽象方法,则该类必须定义为抽象类
(5)抽象类可以有构造函数
(6)抽象类中的方法可以使用private,protected,public来修饰。
(7)一个类可以同时实现多个接口,但一个类只能继承于一个抽象类。
Static 关键字
声明类属性或方法为 static(静态),就可以不实例化类而直接访问。
静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。
由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。
静态属性不可以由对象通过 -> 操作符来访问。
自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字 self,parent 或 static。
php中const与static的区别:1、const只能修饰类的属性,static可以修饰属性和方法;2、const一旦被定义不可更改,static修饰的变量是可以被更改的;3、const不需要变量符号,而static需要。
<?php
class Foo
{static $my_static = 'foo';function staticValue() {return self::$my_static;}
}
echo Foo::$my_static . PHP_EOL;
$foo = new Foo();
print $foo->staticValue() . PHP_EOL;
?>
Final
如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。
PHP 不会在子类的构造方法中自动的调用父类的构造方法
PHP超级全局变量
PHP超级全局变量列表:
- $GLOBALS 一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
- $_SERVER 一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组
- $_REQUEST 用于收集HTML表单提交的数据。
- $_POST 广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="post"。
- $_GET 广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="get"。
Array []
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
文件包含
include 和 require 语句是相同的,除了错误处理方面:
require 会生成致命错误(E_COMPILE_ERROR)并停止脚本
include 只生成警告(E_WARNING),并且脚本会继续
语法
include 'filename';和require 'filename';
文件处理
文件字节数即输出
<?php
echo readfile("mycont.txt");
?>
读取此文件并写到输出流(如读取成功则 readfile() 函数返回字节数)
count=字节数+2*(行数-1)
文件打开/读取/关闭/写入
fread() 的第一个参数包含待读取文件的文件名,第二个参数规定待读取的最大字节数。
<?php
$myfile = fopen("mycont.txt", "r")
or
die("Unable to open file!");
//echo fread($myfile,filesize('mycont.txt'));
echo fgets($myfile);
echo fgets($myfile);
echo fgets($myfile);
fclose($myfile);
?>
fopen
<?php
$myfile = fopen("newfile.txt", "w") or
die("Unable to open file!");
$txt = "coleak1\n";
fwrite($myfile, $txt);
$txt = "coleak2\n";
fwrite($myfile, $txt);
fclose($myfile);
?>
其他文件操作
php文件重命名:函数rename()。
php文件复制:函数copy();
php文件删除:函数unlink();
file_exists() 判断文件是否存在
is_file() 是否为文件。
文件属性获取
<?php
$file = 'newfile.txt';
file_exists($file) or die('文件不存在,程序退出!');
echo $file.' 文件大小是:'.filesize($file).' 个字节'.PHP_EOL;
if(is_readable($file)){echo $file.' 文件是可读的。'.PHP_EOL;
}else{echo $file.' 文件是不可读的。'.PHP_EOL;
}
if(is_writable($file)){echo $file.' 文件是可写的。'.PHP_EOL;
}else{echo $file.' 文件是不可写的。'.PHP_EOL;
}
if(is_executable($file)){echo $file.' 文件是可执行的。'.PHP_EOL;
}else{echo $file.' 文件是不可执行的。'.PHP_EOL;
}
echo '文件的创建时间是:'.date('Y-m-d H:i:s',filectime($file)).'。'.PHP_EOL;
echo '文件的修改时间是:'.date('Y-m-d H:i:s',filemtime($file)).'。'.PHP_EOL;
echo '文件上次的访问时间是:'.date('Y-m-d H:i:s',fileatime($file)).'。'.PHP_EOL;
?>
目录操作
新建目录:mkdir(路径,权限,递归创建)
删除目录:rmdir()
移动(改名):rename()
获取目录内容:
//打开目录
目录句柄 = opendir()
//读取目录
文件名 = readdir(目录句柄)
依次读取文件名,同时向下移动文件句柄指针,读取不到则返回false
//关闭目录
closedir()
递归读取目录内容
<?php
//递归遍历目录
$dirfile="c:/";
function tree($dirfile)
{$dir = opendir($dirfile);while (($file = readdir($dir)) !== false){if(is_dir("$dirfile{$file}") && ($file !=".") && ($file !="..")){if(is_readable("$dirfile{$file}")){echo "目录 $dirfile{$file} ".PHP_EOL;tree("$dirfile{$file}");}else{echo "目录 $dirfile{$file} 不可访问".PHP_EOL;}}else{if( ($file !=".") && ($file !="..")){echo "文件 $dirfile/{$file}".PHP_EOL;}}}closedir($dir);
}
tree($dirfile);
?>
正则表达式
经常使用的分隔符是正斜线(/)、hash符号(#) 以及取反符号(~)
元字符是用于构造规则表达式的具有特殊含义的字符。如果要在正则表达式中包含元字符本身,必须在其前加上”\”进行转义
元字符 说明
* 0次、1次或多次匹配其前的原子
+ 1次或多次匹配其前的原子
? 0次或1次匹配其前的原子
| 匹配两个或多个选择
^ 匹配字符串串首的原子
$ 匹配字符串串尾的原子
[] 匹配方括号中的任一原子
[^] 匹配除方括号中的原子外的任何字符
{m} 表示其前原子恰好出现m次
{m,n} 表示其前原子至少出现m次,至多出现n次(n>m)
{m,} 表示其前原子出现不少于m次
() 整体表示一个原子
. 匹配除换行之外的任何一个字符
phpstorm报错解决
phpstorm运行时显示warning:Unable to load dynamic library 'mysqli' 库配置路径错误
发现错误提示的目录不是我的php的安装目录,它找库的地方是不对的。
打开php.ini
;extension_dir = "ext"注释打开修改为:
extension_dir = “E:\apa\php-7.4.22\ext”
注:E:\apa\php-7.4.22\ext为我的PHP各种库的安装目录。
超全的PHP进阶知识点相关推荐
- 一篇总结得超全的前端进阶文章!入门、技巧、方法、书籍、网站...一步到位!
结合个人经历总结的前端入门方法,总结从零基础到具备前端基本技能的道路.学习方法.资料.由于能力有限,不能保证面面俱到,只是作为入门参考,面向初学者,让初学者少走弯路. 互联网的快速发展和激烈竞争,用户 ...
- Java开发自学教程!这里有份超全Java体系化进阶学习图谱
二.面试题 面:考你几个红黑树的知识点?? 红黑树的数据结构都用在哪些场景,有什么好处? 红黑树的时间复杂度是多少? 红黑树中插入新的节点时怎么保持平衡? 面:2-3树都是不没看,回去等消息吧! 三. ...
- Android-技术的下半场,这里有份超全Android体系化进阶学习图谱
移动端真正进入下半场了吗?于我看来并没有,最多说"Android技术的探索"进入了下半场,而整个市场还是乐观的.以前是BAT的天下,而近两年出来越来越多的独角兽:头条.抖音.拼多多 ...
- 超全PHP学习资源整理:入门到进阶系列
PHP是少数几门在语言层面饱受诟病,但在实际开发和应用上却又让人无法撒手的语言之一.就好比路边摊小吃,一遍骂人家不卫生,一遍却又说:真香.所谓接地气,不外如此,大道理不说,PHP光是轮子多.市场占有率 ...
- 2017二级c语言成绩,2017全国计机等级考试二级C语言知识点超全整(打印版).docx
2017全国计机等级考试二级C语言知识点超全整(打印版) 全国计算机 等级考试 目录 第一部分 公共基础知识 第 1 章 算法与数据结构1 HYPERLINK \l "_TOC_250068 ...
- 视频教程-JavaWeb从入门到实战,超全知识点+仿京东项目-Java
JavaWeb从入门到实战,超全知识点+仿京东项目 12年以上开发经验,担任亚信科技核心架构师,丰富的JavaEE开发和Oracle数据库设计经验,精通Java\JavaScript\HTML5等编程 ...
- Pandas知识点超全总结
Pandas知识点超全总结 一.数据结构 1.Series 1.创建 2.切片.修改 3.其他属性 2.DataFrame 1.创建 2.切片 3.增加.修改 4.删除 5.查看 二.读写数据 1.读 ...
- 免费的计算机编程类中文书籍(超全)
https://github.com/justjavac/free-programming-books-zh_CN 语言无关类 操作系统 智能系统 分布式系统 编译原理 函数式概念 计算机图形学 WE ...
- java从零开始系统性学习完整超全资源+笔记(还在更新中)
java从零开始系统性学习完整超全资源+笔记(还在更新中) 前言 资源来自:王汉远java基础, B站视频: https://www.bilibili.com/video/BV1b4411g7bj/? ...
最新文章
- inotifywait实现目录监控
- 简介浏览器内核与JavaScript引擎
- android bitmap 加边框,Android 给圆角的Bitmap加边框
- 【渝粤教育】电大中专Office办公软件 (3)作业 题库
- This iPhone 6s is running iOS 11.3.1 (15E302), which may not be supported by this version of Xcode.
- 解决复制文件时出乱码
- 小新pro13黑苹果配置实录
- LabView实验——温度检测系统(实验学习版)
- Excel和word的打印预览快捷键
- 贴片钽电容封封装及规格和参数资料
- python中assert的用法(简洁明了)
- Mysql 1055错误
- SMTP邮箱服务器发送邮件
- IPFS系列 - 体验 IPFS Docker
- 2.4G无线技术参数及行业分享
- Chamfer Distance (CD)
- 关于颜色HSL(色度、饱和度、亮度)
- python中ox_Python中os包的用法
- “网上购车平台”又出低首付上私户新模式
- mmdection介绍