• 运行在服务器端,脚本编程语言

centos7安装:

CentOS7安装Apache与PHP 并将php文件显示到Apache页面中_centos7如何显示php-CSDN博客

Apache:

网站文件夹:/var/www/html

涉及apache.conf文件的修改,需要重启才能生效

systemctl restart httpd

使用mysqli扩展连接mysql

yum install php-mysqli   

systemctl restart httpd


<?php
// 数据库配置信息
$host = 'localhost';  // 数据库服务器地址
$username = 'your_username';  // 数据库用户名
$password = 'your_password';  // 数据库密码
$database = 'your_database';  // 要使用的数据库名

// 创建连接
$conn = new mysqli($host, $username, $password, $database);

// 检查连接
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";

// 使用完毕关闭连接
$conn->close();
?>

php基础

标记与注释

<?php 代码 ?>

所有代码都要写注释!!!

行注释:

// 或 #

块注释:

/* */

/* 
*
*
*/

语句分隔符

系统需要判断行结束,需要每行后面加“ ;”

变量:

定义(写入内存):php不需要关键字来定义变量

$var1;
$var2 = 2;
#输出
echo $var2;
$var2 = 1;
echo '<hr/>',$var2;
#从内存删除变量
unset ($var2);

$

命名规则:

$开始

预定义变量:

系统定义的变量(都是数组),存储许多需要用到的数据

$_GET:获取所有表单以get方式提交的数据

$_POST:

$_REQUEST:get和post

$GLOBALS:全局变量

$_SERVER:服务器信息

$_SESSION:session会话数据

$_COOKIE:cookie会话数据

$_ENV:环境信息

$_FILES:用户上传的文件信息

可变变量:

如果1个变量保存的值刚好是另一个变量的名字。那么可以直接访问另一个变量的值:

$a = 'b';
$b = 'bb';
#再加一个$
$$a == 'bb'

内存分区:

栈区:程序可以操作的内存空间,不存数据,运行代码,少,快

代码段:存储程序,不执行

数据段:普通数据(全局区,静态区...)较大,较快

堆区:复杂数据,大,效率低

传值:

值传递:两个变量没关系 $a=$b

引用传值:共同指向一个内存地址 $a=&$b

常量:

通常不可改变

  1. define('name',value);

  2. const name = value;(用这个)

常量不需要$

名字以大写为主

常量在定义的时候必须赋值

访问常量:echo name 或者 echo constant('name');

魔术常量:值会随着环境变化而变化,用户无法改变

__DIR__ :脚本所在绝对路径
__FILE__:当前被执行脚本绝对路径(带自己名)
__LINE__:当前所属行数
__NAMESPACE__:当前所属命名空间

数据类型:(PHP弱类型语言,变量本身没有类型)

存储的数据本身的类型

resource,存放资源数据(PHP外部数据,如数据库,文件)

NULL,不能运算

自动转换数据类型:

强制转换:

一般转bool,数值

类型判断:返回变量所保存的数据的类型 is_系列函数

由于返回的是bool,不能用echo

用var_dump(is_int($a));

Gettype(变量名):获取类型

Settype(变量名,类型):与强制转换不同:强制转换不会处理实际存储的内容而Settype会改变数据本身

== 大小相同,类型可不同

连接:

. 两个字符串连接到一起

.= 连接后赋值给左边变量

错误抑制:

@加在可能出错的表达式前

分支:

elseif

switch case default中case相当于==,case,default里最后有break

流程控制替代语法:

{}不美观:

常用系统函数:

文件加载:

在PHP中,被包含的文件是单独进行编译的

require和include区别:包含不到文件时,报错的形式不一样

include:warning

require:error

函数:

php允许实参多于形参

default value形参默认值

设置默认值后,后侧形参也必须有默认值

引用传递:只有变量才能引用传递

没有明确return,则返回NULL

静态变量:

static

可变函数 回调函数:

匿名函数:

变量保存匿名函数,本质上得到的是一个对象(closure闭包)

注意!匿名函数的定义需要;;;;;

注意!内部返回的是innerfunction,而不是innerfunction(),加上()就相当于运行函数

伪类型:

数学函数:

rand是闭包

ceil向上取整

floor向下取整

pow指数

函数的函数:

function_exits判断函数在内存是否存在

func_get_arg在自定义函数中获取指定数值对应的参数

func_get_args所有参数(数组) 实参

func_num_args自定义函数的参数数量 实参

参数的标识从0开始,0,1,2...

错误处理:

语法错误,代码编译不通过,不执行

运行时错误

逻辑错误

错误代码被定义为系统常量

trigger_error 不会阻止系统报错

字符串:

单引号,双引号区别:

#heredoc
$str = <<<边界符
	字符串内容
边界符;
#nowdoc
$str = <<<'边界符'
	字符串内容
边界符;

注意!上边界符后面不能有任何内容!包括空格!

下边界符必须在最左边!且后面只能跟分号

内部啥都是定义的字符串,注释也是!

字符串长度:

字符串相关函数:

数组:

注意!PHP中数组存储在堆区,一块连续的内存,但php有垃圾回收机制

面向对象

方法内定义的变量不是类成员

方法没法新增

类成员中,属性,类常量,方法可以无限定义,除了这三个成员,其他都不能直接写在类中

访问修饰限定符:

类内部对象:

常用private

构造方法:

析构方法:较少用

对象传值:

范围解析操作符:类直接访问类成员,访问类常量(对象用->访问不到)

静态成员:

注意::后面加上$

对象无法访问静态属性,可以访问静态方法

self关键字:代替类名

在类的内部实例化对象,外面$s = Saler::getInstance()是获取实例

类的加载:

注意下面!!!!!

手动加载

自动加载

这里的$classname形参就是使用类时当前类的名字,并且这个形参名classname是随意的,可以写成$a

对象克隆:

面向对象高级

封装:

继承:

多态:

PHP是弱类型,只能模拟多态

单例模式:

<?php
    # 单例模式
    # 1. 私有构造函数
    # 2. 私有静态属性
    # 3. 公有静态方法
    class singeton{
        # 私有化静态属性,保存已产生的实例
        private static $instance = null;
        # 私有化构造函数
        # 防止外部实例化
        private function __construct(){
            //echo "constructor";
        }

        # 公有静态方法
        # 返回实例
        public static function getInstance(){
            if(!self::$instance instanceof self){
                self::$instance = new self();
            }
            return self::$instance;
        }

        # 私有化克隆方法
        # 防止外部克隆
        private function __clone(){
            //echo "clone";
        }
    }

    $s1 = singeton::getInstance();# 静态方法中调用静态属性,如果已有则返回,没有则实例化
    $s2 = singeton::getInstance();
    $s3 = singeton::getInstance();
    var_dump($s1,$s2,$s3);
?>

工厂模式:

<?php
    # 工厂模式
    # 产生一批类,具有相似性
    class Awow{
        public function display(){
            echo "A";
        }
    }

    class Bwow{
        public function display(){
            echo "B";
        }
    }

    class Cwow{
        public function display(){
            echo "C";
        }
    }

    # 工厂类
    class Factory{
        #提供产生对象的方法
        public static function getInstance($flag){
            switch($flag){
                case 'A':
                    return new Awow();
                case 'B':
                    return new Bwow();
                case 'C':
                    return new Cwow();
                default:
                    return null;
            }
        }
    }
    # 外部调用方便
    $a = Factory::getInstance('A');
    $a->display();

    $b = Factory::getInstance('B');
    $b->display();

    $c = Factory::getInstance('C');
    $c->display();

    $d = Factory::getInstance('D');
    var_dump($d);
?>

命名空间:

<?php
    namespace space1;
    function test(){
        echo __NAMESPACE__; //space1
    }
    const PI = 3.14;
    echo PI;
    test();
    
    namespace space2;
    function test(){
        echo __NAMESPACE__; //space2
    }
    const PI = 3.1415926;
    echo PI;
    test();
?>

子空间:

<?php
    namespace father;
    function display(){
        echo "This is a function in father namespace";
    }
    display();
    echo "<br>";

    namespace father\son;
    function display(){
        echo "This is a function in son namespace";
    }
    display();

?>

命名空间访问:

<?php

    namespace father\son;
    function display(){
        echo "This is a function in son namespace",'<br/>';
    }
    
    namespace father\daughter;
    function display(){
        echo "This is a function in daughter namespace",'<br/>';
    }

    \father\display(); # 完全限定名称访问
    
    namespace father;
    function display(){
        echo "This is a function in father namespace",'<br/>';
    }

    display(); 
    son\display(); # 相当于father + son\display()
    daughter\display(); # 相当于father + daughter\display()
    \father\son\display(); # 完全限定名称访问


?>

全局空间:

命名空间应用:

include,require绝对路径更安全!!!

引入: