至尊技术网 - 面向对象
https://www.zzwws.cn/tag/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/
-
PHP面向对象的链式调用方式
https://www.zzwws.cn/archives/6350/
2022-07-21T11:20:03+08:00
实现起来也还蛮简单的,只需要在每个方法最后返回$this就可以了<?php
class wc
{
public function __construct($who)
{
echo "{$who}准备去上厕所了";
}
public function go()
{
echo "1.跑出了教室";
return $this;
}
public function action($ss)
{
echo $ss . "2.到了厕所,开始尿尿";
return $this;
}
public function back()
{
echo "3.尿尿结束,回到教室";
return $this;
}
}
$xm = new wc("小明");
$xm->go()->action("<br>")->back();
-
PHP面向对象封装MySQL PDO(已使用预处理)
https://www.zzwws.cn/archives/6343/
2022-06-10T11:38:00+08:00
Mysql.class.php<?php
class Mysql
{
public $link;
public function __construct()
{
$this->conn();
}
/**
* 连接数据库,从配置文件读取配置信息
*/
public function conn()
{
$cfg = require 'config.php';
try {
$this->link = new PDO("mysql:dbname={$cfg['databaseName']};host={$cfg['host']};charset={$cfg['charset']};port={$cfg['port']}", $cfg['name'], $cfg['password']);
$this->link->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // 设置禁止本地模拟prepare
//$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);// 设置捕获异常
} catch (PDOException $e) {
die("Error: " . $e->getMessage());
}
}
/**
* 查询多行数据
* @param string $table 表名字
* @param string $where where条件
* @param string $field 字段
* @param string $additional 附加sql语句
* @return array
*/
public function getAll($table, $where = [], $field = "*", $additional = '')
{
if (strpos($field, ",") !== false) {
$arr = explode(",", $field);
$str = '';
foreach ($arr as $v) {
$str .= "`{$v}`,";
}
$field = substr($str, 0, -1);
} else if ($field != "*") {
$field = "`{$field}`";
}
$sql = "SELECT {$field} FROM `{$table}`";
$sql2 = '';
$value = [];
if ($where) {
if (!is_array($where[0])) {
if (strtolower($where[1]) == 'in') {
$where[1] = 'IN';
$sql2 = " `{$where[0]}` {$where[1]} (";
if (is_array($where[2])) {
foreach ($where[2] as $v) {
$value[] = $v;
$sql2 .= '?,';
}
} else {
$value[] = $where[2];
$sql2 .= '?';
}
$sql2 = rtrim($sql2, ',') . ')';
} else {
$value[] = $where[2];
$sql2 = " `{$where[0]}` {$where[1]} ?";
}
} else {
foreach ($where as $v) {
if (strtolower($v[1]) == 'in') {
$v[1] = 'IN';
$sql2 .= " `{$v[0]}` {$v[1]} (";
if (is_array($v[2])) {
foreach ($v[2] as $v2) {
$value[] = $v2;
$sql2 .= "?,";
}
} else {
$value[] = $v[2];
$sql2 .= "?";
}
$sql2 = rtrim($sql2, ',') . ') AND';
} else {
$value[] = $v[2];
$sql2 .= " `{$v[0]}` {$v[1]} ? AND";
}
}
$sql2 = substr($sql2, 0, -4);
}
if ($sql2) {
$sql .= " WHERE " . $sql2;
}
}
if ($additional) {
$sql .= ' ' . $additional;
}
$res = $this->link->prepare($sql);
$res->execute($value);
$data = $res->fetchAll(PDO::FETCH_ASSOC);
return $data;
}
/**
* 查询单行数据
* @param string $table 表名字
* @param string $where where条件
* @param string $field 字段
* @param string $additional 附加sql语句
* @return array
*/
public function getRow($table, $where = [], $field = "*", $additional = '')
{
if (strpos($field, ",") !== false) {
$arr = explode(",", $field);
$str = '';
foreach ($arr as $v) {
$str .= "`{$v}`,";
}
$field = substr($str, 0, -1);
} else if ($field != "*") {
$field = "`{$field}`";
}
$sql = "SELECT {$field} FROM `{$table}`";
$sql2 = '';
$value = [];
if ($where) {
if (!is_array($where[0])) {
if (strtolower($where[1]) == 'in') {
$where[1] = 'IN';
$sql2 = " `{$where[0]}` {$where[1]} (";
if (is_array($where[2])) {
foreach ($where[2] as $v) {
$value[] = $v;
$sql2 .= '?,';
}
} else {
$value[] = $where[2];
$sql2 .= '?';
}
$sql2 = rtrim($sql2, ',') . ')';
} else {
$value[] = $where[2];
$sql2 = " `{$where[0]}` {$where[1]} ?";
}
} else {
foreach ($where as $v) {
if (strtolower($v[1]) == 'in') {
$v[1] = 'IN';
$sql2 .= " `{$v[0]}` {$v[1]} (";
if (is_array($v[2])) {
foreach ($v[2] as $v2) {
$value[] = $v2;
$sql2 .= "?,";
}
} else {
$value[] = $v[2];
$sql2 .= "?";
}
$sql2 = rtrim($sql2, ',') . ') AND';
} else {
$value[] = $v[2];
$sql2 .= " `{$v[0]}` {$v[1]} ? AND";
}
}
$sql2 = substr($sql2, 0, -4);
}
if ($sql2) {
$sql .= " WHERE " . $sql2;
}
}
if ($additional) {
$sql .= ' ' . $additional;
}
$res = $this->link->prepare($sql);
$res->execute($value);
$data = $res->fetch(PDO::FETCH_ASSOC);
return $data;
}
/**
* 自动创建sql语句并执行
* @param string $table 表名字
* @param array $data 关联数组 键/值与表的列/值对应
* @param string $act 1为insert,2为update
* @param array $where 条件,用于update
* @return int 成功为insert产生的主键值,update是影响的行数,失败为0
*/
public function exec($table, $data, $act = 1, $where = [])
{
$value = [];
if ($act == 1) {
$sql = "INSERT INTO `{$table}` (`";
$sql .= implode('`,`', array_keys($data)) . '`)';
$str = '';
foreach ($data as $v) {
$str .= "?,";
}
$str = substr($str, 0, -1);
$sql .= " VALUES ({$str})";
$value = array_values($data);
} else {
$sql = "UPDATE `{$table}` SET ";
foreach ($data as $k => $v) {
$sql .= "`" . $k . '`= ' . " ?,";
$value[] = $v;
}
$sql = rtrim($sql, ',');
$sql2 = '';
if ($where) {
if (!is_array($where[0])) {
if (strtolower($where[1]) == 'in') {
$where[1] = 'IN';
$sql2 = " `{$where[0]}` {$where[1]} (";
if (is_array($where[2])) {
foreach ($where[2] as $v) {
$value[] = $v;
$sql2 .= '?,';
}
} else {
$value[] = $where[2];
$sql2 .= '?';
}
$sql2 = rtrim($sql2, ',') . ')';
} else {
$value[] = $where[2];
$sql2 = " `{$where[0]}` {$where[1]} ?";
}
} else {
foreach ($where as $v) {
if (strtolower($v[1]) == 'in') {
$v[1] = 'IN';
$sql2 .= " `{$v[0]}` {$v[1]} (";
if (is_array($v[2])) {
foreach ($v[2] as $v2) {
$value[] = $v2;
$sql2 .= "?,";
}
} else {
$value[] = $v[2];
$sql2 .= "?";
}
$sql2 = rtrim($sql2, ',') . ') AND';
} else {
$value[] = $v[2];
$sql2 .= " `{$v[0]}` {$v[1]} ? AND";
}
}
$sql2 = substr($sql2, 0, -4);
}
if ($sql2) {
$sql .= " WHERE " . $sql2;
}
}
}
$res = $this->link->prepare($sql);
$run = $res->execute($value);
if ($run) {
if ($act == 1) {
return $this->link->lastInsertId();
} else {
return $res->rowCount();
}
} else {
return 0;
}
}
/**
* 删除数据
* @param string $table 表名字
* @param array $where where条件
* @return bool
*/
public function delete($table, $where = [])
{
$sql = "DELETE FROM `{$table}`";
$sql2 = '';
$value = [];
if ($where) {
if (!is_array($where[0])) {
if (strtolower($where[1]) == 'in') {
$where[1] = 'IN';
$sql2 = " `{$where[0]}` {$where[1]} (";
if (is_array($where[2])) {
foreach ($where[2] as $v) {
$value[] = $v;
$sql2 .= '?,';
}
} else {
$value[] = $where[2];
$sql2 .= '?';
}
$sql2 = rtrim($sql2, ',') . ')';
} else {
$value[] = $where[2];
$sql2 = " `{$where[0]}` {$where[1]} ?";
}
} else {
foreach ($where as $v) {
if (strtolower($v[1]) == 'in') {
$v[1] = 'IN';
$sql2 .= " `{$v[0]}` {$v[1]} (";
if (is_array($v[2])) {
foreach ($v[2] as $v2) {
$value[] = $v2;
$sql2 .= "?,";
}
} else {
$value[] = $v[2];
$sql2 .= "?";
}
$sql2 = rtrim($sql2, ',') . ') AND';
} else {
$value[] = $v[2];
$sql2 .= " `{$v[0]}` {$v[1]} ? AND";
}
}
$sql2 = substr($sql2, 0, -4);
}
if ($sql2) {
$sql .= " WHERE " . $sql2;
}
}
$res = $this->link->prepare($sql);
return $res->execute($value);
}
/**
* count数据
* @param string $table 表名字
* @param array $where where条件
* @param string $field 字段
* @return int
*/
public function count($table, $where = [],$field = '*')
{
$sql = "SELECT COUNT({$field}) FROM `{$table}`";
$sql2 = '';
$value = [];
if ($where) {
if (!is_array($where[0])) {
if (strtolower($where[1]) == 'in') {
$where[1] = 'IN';
$sql2 = " `{$where[0]}` {$where[1]} (";
if (is_array($where[2])) {
foreach ($where[2] as $v) {
$value[] = $v;
$sql2 .= '?,';
}
} else {
$value[] = $where[2];
$sql2 .= '?';
}
$sql2 = rtrim($sql2, ',') . ')';
} else {
$value[] = $where[2];
$sql2 = " `{$where[0]}` {$where[1]} ?";
}
} else {
foreach ($where as $v) {
if (strtolower($v[1]) == 'in') {
$v[1] = 'IN';
$sql2 .= " `{$v[0]}` {$v[1]} (";
if (is_array($v[2])) {
foreach ($v[2] as $v2) {
$value[] = $v2;
$sql2 .= "?,";
}
} else {
$value[] = $v[2];
$sql2 .= "?";
}
$sql2 = rtrim($sql2, ',') . ') AND';
} else {
$value[] = $v[2];
$sql2 .= " `{$v[0]}` {$v[1]} ? AND";
}
}
$sql2 = substr($sql2, 0, -4);
}
if ($sql2) {
$sql .= " WHERE " . $sql2;
}
}
$res = $this->link->prepare($sql);
$res->execute($value);
$data = $res->fetch(PDO::FETCH_NUM);
return $data[0];
}
}
config.php<?php
return array(
'host' => 'localhost',
'name' => 'root',
'password' => 'root',
'databaseName' => 'cs_cn',
'port' => '3306',
'charset' => 'utf8'
);
使用方法<?php
require 'Mysql.class.php';
$mysql = new Mysql();
// 添加
$data = [
'code' => mt_rand(1000000000,9999999999),
'url' => 'https://www.zzwws.cn',
'ip' => mt_rand(1000000000,9999999999),
'add_time' => time()
];
$res = $mysql->exec('zz_url',$data);
if($res){
echo '添加成功';
}else{
echo '添加失败';
}
// 修改
$data = [
'code' => mt_rand(1000000000,9999999999)
];
$where = ['id','=',51];
// 或者
// $where = [
// ['id','=',51],
// ['ip','=','3755406202']
// ];
$res = $mysql->exec('zz_url',$data,2,$where);
if($res){
echo '修改成功';
}else{
echo '修改失败';
}
// 查询一行数据
$row = $mysql->getRow('zz_url',['id','=',51],'id,code');
if(!$row){
echo '获取失败';
}
print_r($row);
// 查询多行数据
$rows = $mysql->getAll('zz_url');
print_r($rows);
// 删除
$where = [
['id','=',52]
];
// 或者
// $where = [
// ['id','in',[1,2,3]]
// ];
$res = $mysql->delete('zz_url',$where);
var_dump($res);
// count
$count = $mysql->count('zz_url',['url','=','https://www.zzwws.cn']);
var_dump($count);
// query方法(没有预处理)
$res = $mysql->link->query("SELECT * FROM zz_url WHERE id = '1'");
$row = $res->fetch(PDO::FETCH_ASSOC);
print_r($row);
-
PHP面向对象封装Redis、Memcached、Memcache实例
https://www.zzwws.cn/archives/5020/
2021-01-12T11:40:00+08:00
Cache.class.php<?php
class Mysql
{
public $link;
public function __construct()
{
$this->conn();
}
/**
* 连接数据库,从配置文件读取配置信息
*/
public function conn()
{
$cfg = require 'config.php';
$this->link = new mysqli($cfg['host'], $cfg['name'], $cfg['password'], $cfg['databaseName'], $cfg['port']);
$this->query('set names ' . $cfg['charset']);
}
/**
* 发送query查询
* @param string $sql sql语句
* @return mixed
*/
public function query($sql)
{
return $this->link->query($sql);
}
/**
* 查询多行数据
* @param string $sql sql语句
* @return array
*/
public function getAll($sql)
{
$res = $this->query($sql);
$data = [];
while ($row = $res->fetch_assoc()) {
$data[] = $row;
}
return $data;
}
}
class Cache
{
public $m;
public function __construct()
{
//创建实例
//Redis 使用前需要重启PHP和Redis
$this->m = new Redis();
$this->m->connect('127.0.0.1', 6379);
$this->m->auth('password');//Redis密码,设置、修改密码后需要重载配置
//Memcached
/*$this->m = new Memcached();
$this->m->addServer('127.0.0.1', 11211);*/
//Memcache
/*$this->m = new Memcache();
$this->m->connect('127.0.0.1', 11211);*/
}
/**
* 添加
* @param string $key 用于存储值的键名
* @param string $value 存储的值
* @return boolean
*/
public function memAdd($key, $value)
{
return $this->m->set($key, $value);
}
/**
* 获取
* @param string $key 要检索的元素的key
* @return string 失败返回false
*/
public function memGet($key)
{
return $this->m->get($key);
}
/**
* 删除
* @param string $key 要删除的元素的key
* @return bool 失败返回false
*/
public function del($key)
{
return $this->m->delete($key);
}
/**
* 清空
* @return bool 失败返回false
*/
public function clear()
{
return $this->m->flushDB();
}
/**
* 获取使用序列化来存储数据
* @param string $key 可以是md5加密后的sql语句
* @param string $sql sql语句
* @return array
*/
public function selectMsg($key, $sql)
{
//先查询数据缓存是否有该数据
$msg = $this->memGet($key);
//没有则查询数据库
// var_dump($msg);
if (!$msg) {
echo '跑数据库';
$mysql = new Mysql();
$list = $mysql->getAll($sql);
//var_dump($list);
//把查询出来的结果序列化存进memcached中
$data = serialize($list);
$this->memAdd($key, $data);
//返回数据库查找的值
return $list;
} else {
echo '不跑数据库';
//有则反序列输出
return unserialize($msg);
}
}
}
//调用
$cache = new Cache();
$sql = 'select * from art';
$key = md5($sql);
$list = $cache->selectMsg($key,$sql);
var_dump($list);
//更新数据
$cache->memAdd($key,null);
//删除数据
$cache->del($key);
//清空数据
$cache->clear();
config.php<?php
return array(
'host' => 'localhost',
'name' => 'cs',
'password' => '123456',
'databaseName' => 'cs',
'port' => '3306',
'charset' => 'utf8'
);
-
PHP Smarty 模板引擎
https://www.zzwws.cn/archives/4999/
2021-01-06T15:03:00+08:00
1.php<?php
class Mini
{
protected $data = array();
//把外界变量放进data数组
public function assign($k, $v)
{
$this->data[$k] = $v;
}
public function comp($temp)
{
$html = file_get_contents($temp);
//注意 下行引用自身的data属性
$html = str_replace('{$', "<?php echo \$this->data['", $html);
$html = str_replace('}', "'];?>", $html);
$compfile = $temp . '.php';
file_put_contents($compfile, $html);
return $compfile;
}
public function display($temp)
{
$compfile = $this->comp($temp);
require $compfile;
}
}
$sql = "select * from art";
$title = '今天不下雨,ε=(´ο`*)))';
$mini = new Mini();
$mini->assign('title', $title);
$mini->display('1.html');
1.html<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<p>{$title}</p>
</body>
</html>
-
PHP面向对象封装MySQL操作函数、文件上传
https://www.zzwws.cn/archives/4997/
2021-01-04T17:36:00+08:00
Mysql.class.php<?php
class Mysql
{
public $link;
public function __construct()
{
$this->conn();
}
/**
* 连接数据库,从配置文件读取配置信息
*/
public function conn()
{
$cfg = require 'config.php';
$this->link = new mysqli($cfg['host'], $cfg['name'], $cfg['password'], $cfg['databaseName'], $cfg['port']);
$this->query('set names ' . $cfg['charset']);
}
/**
* 发送query查询
* @param string $sql sql语句
* @return mixed
*/
public function query($sql)
{
return $this->link->query($sql);
}
/**
* 查询多行数据
* @param string $sql sql语句
* @return array
*/
public function getAll($sql)
{
$res = $this->query($sql);
$data = [];
while ($row = $res->fetch_assoc()) {
$data[] = $row;
}
return $data;
}
/**
* 查询单行数据
* @param string $sql sql语句
* @return array
*/
public function getRow($sql)
{
$res = $this->query($sql);
return $res->fetch_assoc();
}
/**
* 查询单个数据
* @param string $sql sql语句
* @return array mixed
*/
public function getOne($sql)
{
$res = $this->query($sql);
return $res->fetch_row()[0];
}
/**
* 自动创建sql语句并执行
* @param string $table 表名字
* @param array $data 关联数组 键/值与表的列/值对应
* @param string $act 动作/update/insert
* @param string $where 条件,用于update
*
*/
public function exec($table, $data, $act = 'insert', $where = '0')
{
if ($act == 'insert') {
//插入语句 insert into 表名 (字段1,字段2) values ('values1','values2')
$sql = "insert into $table (";
$sql .= implode(',', array_keys($data)) . ')';
$sql .= " values ('";
$sql .= implode("','", array_values($data)) . "')";
} else {
//修改语句 update 表名 set 字段1='values1',字段2='values2' where id=1
$sql = "update $table set ";
foreach ($data as $k => $v) {
$sql .= $k . '=' . "'$v',";
}
$sql = rtrim($sql, ',');
$sql .= " where $where";
}
return $this->query($sql);
}
/**
* 返回上一条insert语句产生的主键值
*/
public function lastId()
{
return $this->link->insert_id;
}
/**
* 返回上一条语句影响的行数
*/
public function affectRows()
{
return $this->link->affected_rows;
}
}
Upload.class.php<?php
abstract class AUpload
{
public $allowext = array('jpg', 'jpeg', 'png', 'rar');
public $maxsize = 1;
protected $error = '';
abstract public function getInfo($name);
abstract public function createDir();
abstract public function randStr($len = 8);
abstract protected function checkType($ext);
abstract protected function checkSize($size);
abstract public function up($name);
public function getError()
{
return $this->error;
}
}
class Upload extends AUpload
{
/**
* 分析$_FILES中$name域的信息,比如$_FILES['pic']
* @param string $name 表单中的file里的name值
* @return array 上传文件的信息
*/
public function getInfo($name)
{
return $_FILES[$name];
}
/**
* 创建目录 /upload/2021/01/04
* @return string 目录路径
*/
public function createDir()
{
$dir = '/upload/' . date('Y/m/d');
if (!is_dir($dir)) {
mkdir($dir, 0777, true);
}
return $dir;
}
/**
* 生成随机字符串
* @param int $len 随机字符串的长度
* @return string 返回生成的字符串
*/
public function randStr($len = 6)
{
$str = str_shuffle('abcedfghjkmnpqrstuvwxyzABCEDFGHJKMNPQRSTUVWXYZ0123456789');
return substr($str, 0, $len);
}
/**
* 检查文件类型
* @param $ext 文件后缀
* @return boolean
*/
protected function checkType($ext)
{
return in_array($ext, $this->allowext);
}
/**
* 检测文件大小
* @param $size 文件大小
* @return boolean
*/
protected function checkSize($size)
{
return $size < $this->maxsize * 1024 * 1024;
}
/**
* 上传文件
* @param string $name 表单中file的name值
* @return string 上传的文件,如/upload/2021/01/04/1609749834kfyzXr.jpg
*/
public function up($name)
{
if (!isset($_FILES[$name])) {
echo '没有上传文件';exit();
}
$info = $this->getInfo($name);
$ext = ltrim(strrchr($info['name'], '.'), '.');
if (!$this->checkType($ext)) {
echo '不允许上传此类型文件';exit();
}
if (!$this->checkSize($info['size'])) {
echo '文件过大';exit();
}
$dir = $this->createDir();
$filename = time() . $this->randStr() . '.' . $ext;
if (move_uploaded_file($info['tmp_name'], $dir . '/' . $filename)) {
$data['path'] = $dir;
$data['filename'] = $filename;
return $data;
} else {
echo '上传失败';
}
}
}
$file = new Upload();
var_dump($file->up('pic'));
upload.html<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>上传</title>
</head>
<body>
<form action="Upload.class.php" method="post" enctype="multipart/form-data">
<input type="file" name="pic">
<button type="submit" id="submit">提交</button>
</form>
</body>
</html>
config.php<?php
return array(
'host' => 'localhost',
'name' => 'cs',
'password' => '123456',
'databaseName' => 'cs',
'port' => '3306',
'charset' => 'utf8'
);
使用方法$mysql = new Mysql();
1、增$art['title'] = trim($_POST['title']);
$art['cat_id'] = trim($_POST['cat_id']);
$art['content'] = trim($_POST['content']);
$art['pubtime'] = time();
if ($mysql->exec('art', $art)) {
echo('添加成功');
} else {
echo('添加失败');
}
2、删$sql = "delete from cat where cat_id='$cat_id'";
if ($mysql->query($sql)) {
echo('删除成功');
} else {
echo('删除失败');
}
3、改$cat_id = $_GET['cat_id'];
$cat['catname'] = trim($_POST['catname']);
if ($mysql->exec('cat',$cat,'update',"cat_id=$cat_id")) {
echo('修改成功');
} else {
echo('修改失败');
}
4、查查询多行数据$sql = "select * from cat";
$arr = $mysql->getAll($sql);
print_r($arr);
取出一行数据$sql = "select * from cat where cat_id='$cat_id'";
if (!$mysql->getRow($sql)) {
echo('栏目不存在');
exit();
}
查询返回一个结果$sql = "select * from cat where cat_id='$cat_id'";
echo $mysql->getOne($sql);
获取上一步insert 操作产生的主键id$mysql->lastId();
-
PHP面向对象的自动加载
https://www.zzwws.cn/archives/4996/
2020-12-30T17:46:54+08:00
实例化某个类时,如MySQL类,需要先require('mysql.php' );如果类比较多,目录也比较多,require文件时,将会变得麻烦我们需要一个自动化的解决方法--自动加载用法:声明一个函数,并注册为"自动加载函数"当系统发现某个类不存在时,会调用此函数,我们可以在函数中加载需要的类文件<?php
function myLoad($class){
require $class . '.php';
}
//把myLoad注册成自动加载函数
spl_autoload_register('myLoad');
new mysql();//查看效果
-
PHP面向对象中的魔术方法
https://www.zzwws.cn/archives/4995/
2020-12-30T17:04:00+08:00
魔术方法:某种场景下,能够自动调用的方法如: __construct、 __destruct、__set、 __get、 __isset、__unset、__call__construct(): 构造方法,new 实例时,自动调用__destruct(): 析构方法,对象销毁时自动调用__get(属性名): 当读取对象的一个不可见属性时,自动调用,并返回值不可见: 未定义或无权访问时__set(属性名,属性值): 当对一个不可见的属性赋值时,自动调用__isset(属性名): 当用isset,或empty判断一个不可见属性时,自动调用__unset(属性名): 当unset一个不可见属性时,自动调用<?php
class Human{
//构造方法,new 实例时,自动调用
public function __construct(){
echo '构造方法';
}
//析构方法,对象销毁时自动调用
public function __destruct(){
echo '析构方法';
}
//当读取对象的一个不可见属性时,自动调用,并返回值
public function __get($a){
echo $a;
}
//当对一个不可见的属性赋值时,自动调用
public function __set($b,$c){
echo $b.'-'.$c;
}
//当用isset,或empty判断一个不可见属性时,自动调用
public function __isset($d){
echo $d;
}
//当unset一个不可见属性时,自动调用
public function __unset($f){
echo $f;
}
}
$zhangSan = new Human();
$zhangSan->daQiu;//daQiu
$zhangSan->kan = '变形金刚';//kan-变形金刚
isset($zhangSan->zhangFei);//zhangFei
unset($zhangSan->liuBei);//liuBei
-
PHP面向对象中的$this、self、parent
https://www.zzwws.cn/archives/4990/
2020-12-29T11:18:22+08:00
<?php
// $this 本对象
// self 本类
// parent 父类
class Single
{
public $rand;
public static $ob;
//final 方法不能被子类重写,实现单例模式
final protected function __construct()
{
$this->rand = mt_rand(1000, 9999);
}
public static function getins()
{
if (self::$ob == null) {
self::$ob = new self();
}
return self::$ob;
}
}
var_dump(Single::getins());
class Par
{
public function __construct()
{
echo mt_rand(10000, 99999);
}
}
class Son extends Par
{
public function __construct()
{
parent::__construct();
echo 1;
}
}
new Son();
-
PHP面向对象中单例模式
https://www.zzwws.cn/archives/4989/
2020-12-29T10:54:00+08:00
<?php
class Single
{
public $rand;
public static $ob;
//final 方法不能被子类重写,实现单例模式
final protected function __construct()
{
$this->rand = mt_rand(1000, 9999);
}
public static function getins()
{
if (Single::$ob == null) {
Single::$ob = new Single();
}
return Single::$ob;
}
}
var_dump(Single::getins());
var_dump(Single::getins());
-
PHP中面向对象3种权限详解
https://www.zzwws.cn/archives/4988/
2020-12-28T17:38:00+08:00
public(公有)protected(受保护)private(私有)外部YNN子类中YYN本类中YYY<?php
class Human
{
public $money = '3000';
protected $car = 'BMW';
private $gf = 'mv';
public function par()
{
echo $this->money;
echo $this->car;
echo $this->gf;
}
}
class Stu extends Human
{
public function sub()
{
echo $this->money;
echo $this->car;
echo $this->gf;
}
}
$stu = new Stu;
$stu->par();
$stu->sub(); //gf没有被继承
echo $stu->money;
echo $stu->car; //无权限访问
echo $stu->gf; //无权限访问