類中的七種語法說明 -屬性 -靜態屬性 -方法 -靜態方法 -類常量 -構造函數 -析構函數
一些基本概念:
**類**? 定義了一件事物的抽象特點。類的定義包含了數據的形式以及對數據的操作
**對象**? 是類的實例
類創建后,我們可以使用**new**運算符來實例化該類的對像
```
兩種寫法
$test=new \Test();
等同于 $test=new \Test;
```
類的變量使用**var**來聲明 var $tyy
一.## 訪問控制
PHP 對屬性或方法的訪問控制,是通過在前面添加關鍵字 public(公有),protected(受保護)或 private(私有)來實現的。
* **public(公有):**公有的類成員可以在任何地方被訪問。
* **protected(受保護):**受保護的類成員則可以被其自身以及其子類和父類訪問。
* **private(私有):**私有的類成員則只能被其定義所在的類訪問。
注意:類屬性必須定義為公有,受保護,私有之一。如果用 var 定義,則被視為公有
注意:類中的方法可以被定義為公有,私有或受保護。如果沒有設置這些關鍵字,則該方法默認為公有。例如:
```
function test(){
echo 11;
}
這是public的
```
注意:父類的protected方法只能在子類中被調用,不能通過實例化子類去執行父類protected方法
二. 常量
可以把在類中始終保持不變的值定義為常量。在定義和使用常量的時候不需要使用 $ 符號。
常量的值必須是一個定值,不能是變量,類屬性,數學運算的結果或函數調用。
~~~
<?php
class MyClass
{
const constant = '常量值';
function showConstant() {
echo self::constant . PHP_EOL;
}
}
echo MyClass::constant . PHP_EOL;
~~~
三.類的繼承與創建
1.基類與派生類叫法:基類就是父類,派生類就是子類
2.PHP 使用關鍵字**extends**來繼承一個類,PHP 不支持多繼承
3.如果父類中有一個無參的構造函數,那么子類就隱式調用父類默認的無 參的構造函數base():,
否則顯示調用父類有參的構造函數base(參數 名)。
4.子類默認繼承父類所有的 public 和 protected 方法,但不繼承 private 方法和屬性
5.繼承的特性
傳遞性:子類可以調用父類以及父類以上所有父類的屬性和方法
單根性:一個子類不能同時繼承2個或2個以上的父類
注意:
子類繼承父類的屬性和方法,也就是說子類擁有父類所有的東西,包括 public(公有)、protected(保護)和private(私有)的。但是父類私有的屬性和方法不能讓子類直接調用,并不是說沒有繼承過來,而是繼承過來了,但是要調用父類的私有屬性和方法的話還是需要通過父類的 public、protected 方法調用
四.## 抽象類
(1)抽象類是指在 class 前加了 abstract 關鍵字且存在抽象方法(在類方法 function 關鍵字前加了 abstract 關鍵字)的類
(2)定義為抽象的類不能被實例化。
(3)被定義為抽象的方法只是聲明了其調用方式(參數),不能定義其具體的功能實現。
(4)繼承一個抽象類的時候,子類必須定義父類中的所有抽象方法;另外,這些方法的訪問控制必須和父類中一樣(或者更為寬松)。例如某個抽象方法被聲明為受保護的,那么子類中實現的方法就應該聲明為受保護的或者公有的,而不能定義為私有的。
(5)如果子類需要實例化,前提是它實現了抽象類中的所有抽象方法。如果子類沒有全部實現抽象類中的所有抽象方法,那么該子類也是一個抽象類,必須在 class 前面加上 abstract 關鍵字,并且不能被實例化
~~~
<?php
abstract class AbstractClass
{
// 強制要求子類定義這些方法
abstract protected function getValue();
abstract protected function prefixValue($prefix);
// 普通方法(非抽象方法)
public function printOut() {
print $this->getValue() . PHP_EOL;
}
}
class ConcreteClass1 extends AbstractClass
{
protected function getValue() {
return "ConcreteClass1";
}
public function prefixValue($prefix) {
return "{$prefix}ConcreteClass1";
}
}
class ConcreteClass2 extends AbstractClass
{
public function getValue() {
return "ConcreteClass2";
}
public function prefixValue($prefix) {
return "{$prefix}ConcreteClass2";
}
}
$class1 = new ConcreteClass1;
$class1->printOut();
echo $class1->prefixValue('FOO_') . PHP_EOL;
$class2 = new ConcreteClass2;
$class2->printOut();
echo $class2->prefixValue('FOO_') . PHP_EOL;
?>
~~~
五.parent 關鍵字
parent 關鍵字可以在任何復寫父類方法的方法中使用,通過在當前對象中調用父類的方法來拓展父類的功能 ,可以調用父類靜態屬性和靜態方法和構造函數及一般方法
parent只能調用父類的public與protected方法及靜態成員,調用private私有的方法會報錯,調用非靜態屬性會報錯
parent:: __construct()表示調用父類構造方法
六.## Static 關鍵字
聲明類屬性或方法為 static(靜態),就可以不實例化類而直接訪問。
靜態屬性不能通過一個類已實例化的對象來訪問(但靜態方法可以)。
由于靜態方法不需要通過對象即可調用,所以偽變量 $this 在靜態方法中不可用。
靜態屬性不可以由對象通過 -> 操作符來訪問。
重點總結:
對象可以調用屬性和靜態屬性,類只能調用靜態屬性。
對象可以調用方法和靜態方法,類可以調用方法和靜態方法。
```
// 實例化類對象
??$object = new Student('Tom');
??// 對象調用屬性
??echo $object->stu\_name
??// 對象調用靜態屬性
??echo $object::$stu\_num
??// 類調用靜態屬性
??echo Student::$stu\_num,'
??// 使用對象分別調用方法和靜態方法
??$object->stuFunction();
??$object->static\_stuFunction();
??$object::stuFunction();
??$object::static\_stuFunction();
??// 使用類分別調用方法和靜態方法
??Student::stuFunction();
??Student::static\_stuFunction();
??// 類調用類常量
??echo Student::STUDENT
```
七.## 構造函數和## 析構函數
構造函數是一種特殊的方法。主要用來在創建對象時初始化對象, 即為對象成員變量賦初始值,在創建對象的語句中與new運算符一起使用。
~~~
function __construct( $par1, $par2 ) {
$this->url = $par1;
$this->title = $par2;
}
~~~
析構函數(destructor) 與構造函數相反,當對象結束其生命周期時(例如對象所在的函數已調用完畢),系統自動執行析構函數。
~~~
function __destruct() {
print "銷毀 " . $this->name . "\n";
}
~~~
注意:
只有當類被實例化的時候才會執行構造函數與析構函數,類的成員被靜態調用時不會被執行
```
class Car{
public static $a=45;
public function __destruct(){
self::$a=55;
}
public static function pay(){
return self::$a;
}
}
echo \Car::$a;
echo (new \Car)::$a;
分別是45,55
```
八.## Final 關鍵字
如果父類中的方法被聲明為 final,則子類無法覆蓋該方法。如果一個類被聲明為 final,則不能被繼承
- linux
- lanmp
- lanmp
- apache
- Apache2.4.x與Apache2.2.x的一些區別
- 跨域請求 Apache 服務器配置
- apache服務器安裝配置ssl數字證書,https訪問
- put請求跨區
- apache允許跨域請求 & ajax 自定義header
- 自定義header
- 安裝最新版openssl
- nginx
- 解決Nginx出現403 forbidden的方法
- nginx: [error] open() "/usr/local/var/run/nginx.pid" failed (2: No such file or directory)
- 如何用linux命令查看nginx是否在正常運行
- nginx反向代理
- nginx 編譯安裝
- nginx重定向
- 一個域名對應多個vue項目
- 關于http和https允許請求設置header問題
- nginx配置ssl證書
- 配置寶塔nginx支持tp5路由規則
- nginx獲取自定義請求頭header
- mysql
- 創建還量表
- 解決Navicat 出錯:1130-host . is not allowed to connect to this MySql server,MySQL
- mysql慢查詢
- explain
- 索引
- sphinx
- coreseek(sphinx)錯誤:WARNING: attribute 'id' not found - IGNORING原因及解決方法
- coreseek在windows安裝問題和使用步驟
- coreseek常見錯誤
- coreseek php操作
- mysql5.6升級5.7.21
- sql操作
- mysql函數
- phpmyadmin上傳文件大小限制
- mysql主從復制
- 單機主從配置
- 修改mysql端口后修改相應的phpmyadmin端口
- MERGE分表
- MySQL 5.7.22 多實例安裝(二進制免編譯安裝模式)
- 解決phpmyadmin mysqli_real_connect(): (HY000/2002): No such file or directory錯誤
- Mysql服務器無法存emoji表情的解決方案
- /var/run/mysqld 目錄每次重啟后都需要手動去創建并賦權mysql用戶才能起到mysql
- mysql排序
- mysql關鍵字沖突
- mysql備份
- mysql5.7密碼修改
- 更改MySQL數據庫目錄位置
- mysql5.6安裝
- 字符集與排序規則
- mysql 鎖
- mysql事務性
- php
- centos7 升級 php 5.4 -> php5.6
- php擴展
- linux切換默認php版本(寶塔)
- vsftpd
- 關于vsftp出現Restarting vsftpd (via systemctl): Job for vsftpd.service failed because the control 的解決辦法
- vdb
- fdisk
- parted
- 磁盤小知識
- CentOS7.x系統根目錄分區擴容
- Linux 格式化分區 報錯Could not stat --- No such file or directory 和 partprobe 命令
- 添加swap交換區
- root
- Centos創建和修改用戶及密碼命令
- linux 命令終端提示符顯示-bash-4.2#解決方法
- firewall
- centOS7下安裝GUI圖形界面
- 在Linux主機上,安裝上傳下載工具包rz及sz
- ping: www.baidu.com: Name or service not known centos7
- linux中 you have newmail in /var/spool/mail/root
- CentOS7啟動SSH服務報:Job for ssh.service failed because the control process exited with error code.......
- ifconfig,netstat 命令找不到解決辦法
- CentOS7系統時間與真實時間相差8小時
- Centos7:利用crontab定時執行任務
- crontab命令
- /usr/bin/curl 執行外鏈
- speedtest-cli命令,網速測試
- yum 卸載命令
- 用戶管理
- PATH環境變量
- rpm 命令
- 防火墻和網絡的安裝
- nohup
- vim命令
- 清理緩存命令
- 錯誤集
- tar解壓包的時候出現錯誤 gzip: stdin: not in gzip format
- 在linux下創建自定義service服務
- 時鐘同步
- 查找大文件
- redis
- yum安裝
- redis主從復制
- php用法
- redis表的特性
- redis 鎖
- redis事務
- redis主從配置+哨兵模式
- redis應用場景
- redis高并發集群下常見問題
- redis思維導圖
- 腦圖1
- 腦圖2
- redis編碼
- redis字符串編碼
- hash編碼
- list編碼
- set編碼
- zset編碼
- 內存回收和內存共享
- redis小知識點
- ffmpeg
- yum安裝ffmpeg
- ffmpeg-php類庫安裝及使用
- make安裝
- WebRTC
- 房間服務器
- 信令服務器
- 打洞服務器
- PHP識別二維碼(php-zbarcode)
- centos7.4安裝Imagemagick
- 第二種方式
- linux小知識
- 查看日志命令
- linux CPU使用率過高或負載過高的處理
- swoole安裝
- mq安裝
- RabbitMQ安裝
- php-amqplib使用--基本使用
- RabbitMQ使用技巧
- tp5
- problem
- thinkphp5的mkdir() Permission denied問題
- 5.5版本以上”No input file specified“問題解決
- 路由帶參數的翻頁,第二頁無數據
- 報錯A non well formed numeric value encountered(Thinkphp5時間戳自動轉換問題)
- order排序沒反應
- tp5分頁--搜索
- tp5文件上傳---寶塔
- 小知識
- return
- volist標簽中使用eq標簽 下拉列表選中selected
- TP5寫入避免某字段重復的問題
- tp5 --url大小寫
- tp5接收數組
- json存儲與查詢
- 接收參數為null
- php替換str_replace的使用方法,支持多個替換
- postman傳數組參數
- Request 排除變量傳參
- sql連表統計查詢
- php循環
- 模型column方法
- 修改器與獲取器
- mysql數據庫group與order不能同時使用
- mysql三表查詢
- json數據
- 獲取數組第一個獲第二個元素的鍵值
- mysql除以100計算
- mysql分組統計
- tp5.1 高級查詢之 表里2字段比較大小
- whereOr()用法
- param數字參數,不能用==判斷相等,需要用=來判斷
- if判斷
- tp5隨機排序
- 短鏈接算法
- $_FILES["file"]二進制數據獲取
- 跨域
- web.config
- iis: httpd相應標頭
- thikphp模板中一維數組如何循環
- tp5 視頻上傳及自定義命名
- 搜索附近的人
- 小程序
- uploadFile:fail Error: unable to verify the first certificate
- 安卓手機打開小程序提示:request:fail ssl hand shake error
- tp5.1引入庫文件
- composer
- tp5小知識
- TP5.1隱藏public和index.php
- tp5擴展
- 二維碼
- phpexcel
- 谷歌驗證碼
- 谷歌驗證碼2
- mysql時間統計
- union合并查詢并分頁
- tp5底層框架學習
- php未知函數
- 類的知識點
- 三大設計模式
- 反射機制
- php常用內置類
- php小知識點
- 變量,函數名,參數前加&,什么意思
- PHP中 比較 0、false、null,'' "
- php小常識
- php緩存
- Trait特性
- php -- 取路徑:getcwd()、DIR、FILE 的區別
- php關于類的常用概念
- php 類與對象全面了解
- php命名空間與引入
- php常見魔法常量
- php常見魔法函數
- PHP 超級全局變量
- tp5.1本身小知識
- 框架運行流程
- 框架教程總結
- 類的自動加載
- 配置文件
- ArrayAccess用法
- yaconf學習
- yaml學習
- config類重點
- php小知識2
- 多語言切換
- jwt(token)
- redis連接池
- 百度富文本
- 圖片路徑轉換
- layui
- 復選框
- 獲取視頻第幾幀作為封面圖
- mysql查詢
- FIND_IN_SET(str,strlist)
- PHP
- 函數取整
- array
- 日期
- header
- php獲取一維,二維數組長度的方法
- php中數組和字符串的相互轉換
- php對數組開頭與末尾的元素進行插入與移除
- 隊列
- PHP substr截取中文字符出現亂碼的問題解疑
- foreach遍歷數組并添加屬性(下標)
- 數組排序
- PHP實現保留兩位小數的三種方法
- 對象轉數組
- php小知識
- 阻塞IO和非阻塞IO,異步與同步的區別
- 后臺運行
- 超時
- php 高精度計算的問題
- move_uploaded_file
- PHP SplQueue 隊列簡介
- @,&&等php符號
- PHP命令行腳本接收傳入參數的三種方式
- php執行linux命令
- 一些封裝函數
- PHP獲取文件大小
- PHP 生成隨機字符串與唯一字符串
- PHP去除emoji表情
- ip
- php把時間計算成幾分鐘前,幾小時前,幾天前的函數
- https
- ssl證書
- 遠程登入密碼和端口修改
- apache配置https
- problems
- 響應狀態status為canceled,解決辦法
- PHP Restful PUT方法的參數提交及接收
- HTTP之預檢,兩種請求
- http增刪改查理解
- js
- js數組與字符串的相互轉換
- js移除Array中指定元素
- 使用sessionStorage、localStorage存儲數組與對象
- 子頁面調用父頁面方法
- input文件上傳
- 隨機字符串
- 數組操作
- js 傳遞數組
- token接入驗證
- 用文件來保存token
- 刪除用戶資料
- 微信function
- 接入驗證及點擊事件
- 基礎token
- 獲取用戶資料
- curl
- 鏈接分享
- 網頁授權登入
- 微信被動回復用戶消息
- 生成微信二維碼
- WxPay
- 單一文件,不能加額外參數
- tp5引用微信支付官方庫文件
- 微信二維碼支付
- 其他
- 手機端發送ajax請求,后臺有可能會接收不到到請求(360瀏覽器和ie瀏覽器)
- 短信發送
- git
- postman無法正常返回結果Could not get any response
- web服務器配置
- 高并發方案
- nginx防盜鏈和限制請求速度
- 高并發概念與測試工具
- 定時秒殺方案
- web接口
- yzdd
- 接口1
- 接口2
- spx
- 接口說明
- 新聞表sbh_artnews字段說明
- 用戶表sbh_homeuser
- 用戶認證表sbh_usertrue
- txsh
- 接口_txsh_1
- chat消息格式
- 表字段
- txsh_第三方接口
- GatewayWorker
- 向對方發送消息,對方會掉線
- 負載均衡
- html
- html中引入調用另一個html的方法
- python
- linux安裝--python3.6
- Centos7卸載Python2.7之后恢復yum
- pycharm漢化
- python錯誤集
- fatal error: Python.h: No such file or directory
- Python小知識
- python中兩個重要的工具setuptools和pip的安裝
- 基礎知識點
- 學習筆記
- tornado基礎流程
- 請求與響應
- 以太坊
- 以太坊賬戶管理
- 一些方法的更新棄用
- 小知識點
- web3.eth.accounts 和 web3.eth.personal 創建account的區別
- web3.py中sendTransaction和sendRawTransaction之間的區別
- 測試網和主網區別
- 以太坊gas、gaslimit、gasPrice、gasUsed詳解
- web安全
- web滲透--全面介紹
- 大概介紹
- xss--介紹
- sql注入-介紹
- 文件上傳下載-介紹
- 越權--介紹
- xxe--介紹
- 暴力破解
- xss漏洞安全編碼系列詳解
- 反射型
- DOM型
- 存儲型
- 圖片隱寫
- sql注入詳解
- 數據庫和其他--介紹
- mysql爆破
- web安全--工具
- sqlmap
- 介紹與安裝
- sqlmap攻擊方式
- Sqlmap中的其他
- sqlmap--get攻擊
- sqlmap--post攻擊
- sqlmap--常用選項及命令
- sqlmap--詳解
- sqlmap--查看
- web安全簡單總結
- api功能擴展
- 阿里云短信
- 阿里云短信sdk新版用法
- 阿里云對象存儲 OSS
- 七牛云上傳
- qq郵箱發送短信驗證碼
- 通過ip獲取歸屬地
- 支付插件
- zoujingli
- swoole
- swoole啟動關閉方案
- swoole服務端主動推送消息
- 創建websocket--systemctl自定義啟動服務
- 創建php腳本來啟動關閉websocket服務
- swoole小知識
- 進程/線程結構圖
- 區塊鏈
- 區塊鏈概念理解
- usdt小知識點1
- 區塊鏈架構1.0、2.0與3.0梳理
- 理解usdt和代幣,智能合約,基礎貨幣
- 波場tron
- 賬號創建
- 代幣轉賬