目录

前文基础知识

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超级全局变量列表:

  1. $GLOBALS  一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
  2. $_SERVER  一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组
  3. $_REQUEST  用于收集HTML表单提交的数据。
  4. $_POST  广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="post"。
  5. $_GET  广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="get"。

Array []

  1. $_FILES
  2. $_ENV
  3. $_COOKIE
  4. $_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进阶知识点相关推荐

  1. 一篇总结得超全的前端进阶文章!入门、技巧、方法、书籍、网站...一步到位!

    结合个人经历总结的前端入门方法,总结从零基础到具备前端基本技能的道路.学习方法.资料.由于能力有限,不能保证面面俱到,只是作为入门参考,面向初学者,让初学者少走弯路. 互联网的快速发展和激烈竞争,用户 ...

  2. Java开发自学教程!这里有份超全Java体系化进阶学习图谱

    二.面试题 面:考你几个红黑树的知识点?? 红黑树的数据结构都用在哪些场景,有什么好处? 红黑树的时间复杂度是多少? 红黑树中插入新的节点时怎么保持平衡? 面:2-3树都是不没看,回去等消息吧! 三. ...

  3. Android-技术的下半场,这里有份超全Android体系化进阶学习图谱

    移动端真正进入下半场了吗?于我看来并没有,最多说"Android技术的探索"进入了下半场,而整个市场还是乐观的.以前是BAT的天下,而近两年出来越来越多的独角兽:头条.抖音.拼多多 ...

  4. 超全PHP学习资源整理:入门到进阶系列

    PHP是少数几门在语言层面饱受诟病,但在实际开发和应用上却又让人无法撒手的语言之一.就好比路边摊小吃,一遍骂人家不卫生,一遍却又说:真香.所谓接地气,不外如此,大道理不说,PHP光是轮子多.市场占有率 ...

  5. 2017二级c语言成绩,2017全国计机等级考试二级C语言知识点超全整(打印版).docx

    2017全国计机等级考试二级C语言知识点超全整(打印版) 全国计算机 等级考试 目录 第一部分 公共基础知识 第 1 章 算法与数据结构1 HYPERLINK \l "_TOC_250068 ...

  6. 视频教程-JavaWeb从入门到实战,超全知识点+仿京东项目-Java

    JavaWeb从入门到实战,超全知识点+仿京东项目 12年以上开发经验,担任亚信科技核心架构师,丰富的JavaEE开发和Oracle数据库设计经验,精通Java\JavaScript\HTML5等编程 ...

  7. Pandas知识点超全总结

    Pandas知识点超全总结 一.数据结构 1.Series 1.创建 2.切片.修改 3.其他属性 2.DataFrame 1.创建 2.切片 3.增加.修改 4.删除 5.查看 二.读写数据 1.读 ...

  8. 免费的计算机编程类中文书籍(超全)

    https://github.com/justjavac/free-programming-books-zh_CN 语言无关类 操作系统 智能系统 分布式系统 编译原理 函数式概念 计算机图形学 WE ...

  9. java从零开始系统性学习完整超全资源+笔记(还在更新中)

    java从零开始系统性学习完整超全资源+笔记(还在更新中) 前言 资源来自:王汉远java基础, B站视频: https://www.bilibili.com/video/BV1b4411g7bj/? ...

最新文章

  1. inotifywait实现目录监控
  2. 简介浏览器内核与JavaScript引擎
  3. android bitmap 加边框,Android 给圆角的Bitmap加边框
  4. 【渝粤教育】电大中专Office办公软件 (3)作业 题库
  5. This iPhone 6s is running iOS 11.3.1 (15E302), which may not be supported by this version of Xcode.
  6. 解决复制文件时出乱码
  7. 小新pro13黑苹果配置实录
  8. LabView实验——温度检测系统(实验学习版)
  9. Excel和word的打印预览快捷键
  10. 贴片钽电容封封装及规格和参数资料
  11. python中assert的用法(简洁明了)
  12. Mysql 1055错误
  13. SMTP邮箱服务器发送邮件
  14. IPFS系列 - 体验 IPFS Docker
  15. 2.4G无线技术参数及行业分享
  16. Chamfer Distance (CD)
  17. 关于颜色HSL(色度、饱和度、亮度)
  18. python中ox_Python中os包的用法
  19. “网上购车平台”又出低首付上私户新模式
  20. mmdection介绍

热门文章

  1. Android studio提示error:module not specified
  2. WKT、WKB和GeoJson
  3. c语言圈复杂度switch,C语言switch/case圈复杂度优化重构
  4. 计算机辅助教学发展方向,第11章计算机辅助教学的发展方向.ppt
  5. 计算机怎样辅助英语教学,英语教学的有效模式--计算机辅助教学
  6. Python之psutil库的使用
  7. CSAPP大作业——程序人生
  8. 株洲北大青鸟毕业感言
  9. 数据库中的三级模式和二级映射
  10. 从月薪3500到700万 我在上海奋斗的五年