PHP基础笔记整理,学习巩固PHP7,以前的应用主要是基于PHP5版本,以后的市场也偏向于逐渐成熟的PHP7,所以学习应用PHP7非常有必要,Hello PHP7!
PHP
(Hypertext Preprocessor
),超文本预处理语言,与Python
类似,都是弱类型脚本语言,解释性语言,PHP
可以与HTML
文档混写。
变量的四种作用域:
$GLOBALS
数组变量中PHP EOF是一种在命令行
shell
和程序语言里定义一个字符串的方法,其包裹的内容可以解析变量。
$a = 'DYBOY';
echo <<<EOF
hello $a
EOF;
?>
运行输出:
hello DYBOY
变量有数据、字符串、类和数组类型
3.1 定义常量:
// 定义一个基础URL常量,常量默认是全局的,可在任何地方调用
define('BASE_URL', 'https://blog.dyboy.cn/');
?>
3.2 数组:
使用count($arr)
获取数组的长度,PHP存在关联数组,键值对的形式
// 循环输出关联数组的内容
$arr = ['status' => 1, 'data' => 'OK'];
foreach($arr as $key => $val){
echo "键名:".$key.' 值:'.$val;
}
?>
3.3 数组排序:
sort()
- 对数组进行升序排列
rsort()
- 对数组进行降序排列
asort()
- 根据关联数组的值,对数组进行升序排列
ksort()
- 根据关联数组的键,对数组进行升序排列
arsort()
- 根据关联数组的值,对数组进行降序排列
krsort()
- 根据关联数组的键,对数组进行降序排列
一些数组的内置函数操作:https://www.runoob.com/php/php-ref-array.html
3.4 $_SERVER:
echo $_SERVER['PHP_SELF'];
echo $_SERVER['SERVER_NAME'];
echo $_SERVER['HTTP_HOST'];
echo $_SERVER['HTTP_REFERER'];
echo $_SERVER['HTTP_USER_AGENT'];
echo $_SERVER['SCRIPT_NAME'];
?>
用起来很舒服的一些常量,这些变量大小写不敏感,都是一样的效果
变量 | 说明 |
---|---|
__LINE__ |
返回当前代码行号 |
__FILE__ |
当前文件完整的路径+文件名,若用在被包含文件中,则返回被包含的文件名 |
__DIR__ |
当前文件的路径 |
__FUNCTION__ |
用在函数内部,输出当前函数名,区分函数名大小写 |
__CLASS__ |
用在类当中,返回当前类名,区分类名大小写 |
__METHOD__ |
类的方法名 |
__NAMESPACE__ |
命名空间 |
面向对象(OOP),对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象。
// 一个类的基本结构
class People{
// var 定义类成员变量
var name;
var age;
var sex;
// 构造函数,用于初始化
function __construct( $name, $age, $sex ) {
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
}
// function定义类成员方法,成员方法数量无限
function run($long){
echo $this->name." can run ".$long." Meters";
}
// 析构函数
function __destruct() {
echo "销毁所有变量";
}
}
$newObj = new People('DYBOY', '20', 'boy'); // 类实例化
?>
类的继承,父类与子类,子类继承父类,并可以扩展父类,PHP不支持多继承
// 类的继承
class Chinese extends People {
// coding...
var position; //家庭住址
// 方法重写,父类的方法无法满足子类需求
function run(){
echo "孩子很6666,可以跑6666666 KM";
}
}
?>
访问控制
public(公有):公有的类成员可以在任何地方被访问。
protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。
private(私有):私有的类成员则只能被其定义所在的类访问。
static关键字
声明类属性或方法为 static(静态),就可以不实例化类而直接访问。
静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。
由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。
静态属性不可以由对象通过 -> 操作符来访问。
PHP中有
require
和include
两种,它俩区别在于include
发生错误后继续执行,require
停止,建议使用require
文件包括读取文件,写入文件,在PHP中有对于form表单传递的文件作处理
if ($_FILES["file"]["error"] > 0)
{
echo "错误:" . $_FILES["file"]["error"] . "
";
}
else
{
echo "上传文件名: " . $_FILES["file"]["name"] . "
";
echo "文件类型: " . $_FILES["file"]["type"] . "
";
echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB
";
echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];
}
?>
对于一些肯可能存在未知错误的地方,需要抛出异常,执行相应的操作,保证后续的工作依然能够顺利处理完
// 创建一个有异常处理的函数
function checkNum($number) {
if($number>1)
{
throw new Exception("变量值必须小于等于 1");
}
return true;
}
// 在 try 块 触发异常
try {
checkNum(2);
// 如果抛出异常,以下文本不会输出
echo '如果输出该内容,说明 $number 变量';
}
// 捕获异常
catch(Exception $e) {
echo 'Message: ' .$e->getMessage();
}
?>
过滤器其实可以看作是一个内置的参数验证函数,也可以自己实现。
filter_var()
- 通过一个指定的过滤器来过滤单一的变量filter_var_array()
- 通过相同的或不同的过滤器来过滤多个变量filter_input()
- 获取一个输入变量,并对它进行过滤filter_input_array()
- 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤过滤器:https://www.runoob.com/php/php-ref-filter.html
php处理json数据有
string json_encode ( $value [, $options = 0 ] )
和mixed json_decode ($json_string [,$assoc = false [, $depth = 512 [, $options = 0 ]]])
两个函数
命名空间解决不同文件中可能函数、变量、类名命名重名导致的冲突,取别名
namesapce mySpace;
// coding...
?>
子命名空间:分层次定义
namespace MyProject\Sub\Level; //声明分层次的单个命名空间
const CONNECT_OK = 1;
class Connection { /* ... */ }
function Connect() { /* ... */ }
/*
创建:
常量 MyProject\Sub\Level\CONNECT_OK
类 MyProject\Sub\Level\Connection
函数 MyProject\Sub\Level\Connect
*/
?>
命名空间的使用:限定、非限定和完全限定三种方式,导入命名空间使用
use
语句,同时可以指定别名as
,比如:use app\index\model\User as UserModel;
// file1.php
namespace Foo\Bar\subnamespace;
const FOO = 1; //常量
function foo() { //函数
//coding...
echo __NAMESPACE__;
}
class foo { //类
static function staticmethod() {}
}
?>
//file2.php
namespace Foo\Bar;
include 'file1.php';
const FOO = 2;
function foo() {
//coding...
echo __NAMESPACE__;
}
class foo {
static function staticmethod() {}
}
/* 1.非限定名称 */
foo(); // 解析为函数 Foo\Bar\foo,输出:Foo\Bar
foo::staticmethod(); // 解析为类 Foo\Bar\foo ,方法为 staticmethod
echo FOO; // 解析为常量 Foo\Bar\FOO,输出2
/* 2.限定名称 */
subnamespace\foo(); // 解析为函数 Foo\Bar\subnamespace\foo,输出Foo\Bar\subnamespace
subnamespace\foo::staticmethod(); // 解析为类 Foo\Bar\subnamespace\foo,
// 以及类的方法 staticmethod
echo subnamespace\FOO; // 解析为常量 Foo\Bar\subnamespace\FOO
/* 3.完全限定名称 */
\Foo\Bar\foo(); // 解析为函数 Foo\Bar\foo
\Foo\Bar\foo::staticmethod(); // 解析为类 Foo\Bar\foo, 以及类的方法 staticmethod
echo \Foo\Bar\FOO; // 解析为常量 Foo\Bar\FOO
// 注意访问任意全局类、函数或常量,都可以使用完全限定名称,例如 \strlen() 或 \Exception 或 \INI_ALL。
?>
More:https://www.runoob.com/php/php-namespace.html
数据库作为存储信息和数据的重要软件,php连接数据库主要有mysqli和PDO两种方式,mysqli只能连接mysql数据库,pdo支持12种类型的数据库操作,属于php的扩展,默认安装了mysqli。
// mysqli连接数据库
// 建立连接 mysqli_connect(host,username,password,dbname,port,socket);
// 面向对象的方式
$conn = new mysqli('127.0.0.1', 'username', 'passwd', 'dbname');
//检测连接
if($conn->connect_error){
die('连接数据库失败:'.$conn->connect_error);
}
//...连接成功
// 执行sql语句
$result = $conn->query("SELECT * FROM users");
if($result->num_rows > 0){
while($row = $result->fetch_assoc()){
echo $row['uid'].$row['username'];
}
}
else{
echo 'Nothing...';
}
// 执行多条语句
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', '[email protected]');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', '[email protected]');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley', '[email protected]')";
$conn->multi_query($sql)
// 关闭连接
$conn->close();
?>
//PDO方式
try {
$conn = new PDO("mysql:host='127.0.0.1';", 'username', 'passwd');
echo "连接成功";
}
catch(PDOException $e) {
echo $e->getMessage();
}
?>
/*mysqli面向过程*/
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// 创建连接
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("连接失败: " . mysqli_connect_error());
}
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
// 输出数据
while($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "
";
}
} else {
echo "0 结果";
}
mysqli_close($conn);
?>
还有很多的内容,比如Date,正则表达式,FTP,HTTP,XML等等的操作,不过这些内容基本都是翻看手册就好了,推荐国内比较快的网站:https://www.php.net
离线手册下载:《PHP7中文手册2018版》
整理部分常用函数,字符串的操作
函数 | 说明 |
---|---|
strlen($str) |
返回字符串的长度 |
strpos($str, $parm) |
成功返回匹配到字符串第一个字符的位置下标 |
addslashes($str) |
在字符串中有预定义字符前加上\ |
explode(',', $str) |
把字符串以, 为分隔符,分割为数组 |
implode(',', $arr) |
把一维数组组合成以, 分隔的字符串 |
trim($str) |
去除字符串两端的空格 |
md5($str) |
计算字符串的MD5散列 |
md5_file($file_path) |
计算对应路径文件的MD5散列 |
sha1() ,sha1_file() |
与md5() 类似 |
ord($char) |
返回字符对应的ASCII 码值 |
chr($num) |
返回ASCII 码数值对应的字符 |
printf($str, $param1, $param2) |
格式化输出 |
sprintf() |
与printf() 类似,返回值存储一个变量可赋值 |
htmlspecialchars($str) |
预定义的实体转化为字符 |
htmlspecialchars_decode($str) |
把字符串中预定义的字符转为HTML实体 |
str_rot13($str) |
将字母字符串ROT13编码,偏移13,编码解码函数相同 |
strstr() |
|
strcmp($str1, $str2) |
比较两个字符串,相等返回0 |
str_word_count(string,return,char) |
计算字符串中的单词数 |
strip_tags(string,allow) |
剥去字符串中的 HTML、XML 以及 PHP 的标签 |
strrev($str) |
字符串反转 |
strtolower($str) |
字符串字母转小写 |
strtoupper($str) |
字符串字母转大写 |
substr(string,start,length) |
字符串截取,编码问题可使用mb_substr() |
strtr(string,from,to) ,strtr(string,array) |
转换字符串中特定的字符。数组是key=keyword,val=替换字符 |
var_dump($param) |
调试输出详情 |
array_reverse($arr) |
数组反转 |
array_unique($arr) |
去除数组中重复的值 |
in_array ( $param, $arr[, TRUE ] ) |
数组中是否存在对应值,存在返回TRUE |
file_get_cotents($url) |
读取文件内容为文本字符串 |
file_put_contents($filepath) |
将内容写入文件 |
file_exists($filepath) |
文件存在否,返回bool |
学习巩固,不断学习,不断巩固,PHP7已经发布到市场好几年了,所以对于PHP7的应用还是非常成熟的,最近看许多基于PHP的项目大部分都用上PHP7版本了,大趋势已到,紧跟时代步伐,欢迎各位与小东交流学习,共同几步!
欢迎大家直接收藏关注我的个人博客,也是原文地址:https://blog.dyboy.cn/program/124.html