超全的PHP进阶知识点

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

前文基础知识

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 起可以用一个变量来动态调用类。但该变量的值不能为关键字 selfparent 或 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各种库的安装目录。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: php

“超全的PHP进阶知识点” 的相关文章