
php
运行在服务器端,脚本编程语言
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
常量:
通常不可改变
define('name',value);
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绝对路径更安全!!!
引入: