PHP object-oriented programming
OOP中的一些基本概念
OOP基本概念代碼實(shí)例
Class Task{
public $description;
public $completed = false;
public function __construct($description)
{
$this->description = $description;
}
public function complete()
{
$this->completed = true;
}
}
$task = new Task('hello construct');
$task->complete();
var_dump($task->completed);
OOP中的一些基本概念
1. php可以面向過程編程业簿,也可以面向?qū)ο缶幊獭?2. 面向?qū)ο笾蓄惻c對(duì)象的屬性與方法相當(dāng)于面向過程中的變量與函數(shù)裙顽。
3. 實(shí)例化類就會(huì)創(chuàng)建一個(gè)對(duì)象,實(shí)例化的同事會(huì)調(diào)用類的構(gòu)造方法'__construct'.
4. $this 的作用相當(dāng)于動(dòng)態(tài)的指定為該類的實(shí)例,使用$this改變屬性與調(diào)用方法
OOP中的封裝思想
OOP中的封裝思想代碼實(shí)例(get與set方法)
第一個(gè)編程實(shí)例:
class Person
{
private $name;
private $age;
/**
* Person constructor.
* @param $name
*/
public function __construct($name)
{
$this->name = $name;
}
public function setAge($age)
{
if($age < 18){
throw new Exception('not old enough');
}
$this->age = $age;
}
public function getAge()
{
return $this->age;
}
}
$zhenxin = new Person('zhenxin');
$zhenxin->setAge(22);
var_dump($zhenxin);
第二個(gè)編程實(shí)例:
class LightSwitch
{
public function on()
{
$this->connect();
}
private function connect()
{
var_dump('connect');
}
}
$light = new LightSwitch();
$light->on();
OOP中的封裝思想
1. 封裝的目的是
* 一是隱藏信息
* 二可以理解為對(duì)外提供接口陨享,例如上例中的get、set方法
2. 對(duì)象的某些屬性不可以直接操作渊涝,操作對(duì)象屬性時(shí)可能會(huì)有限制馏段,在類中使用set,get方法可以直接對(duì)屬性進(jìn)行限制
3. public湃望、protected换衬、private關(guān)鍵字
* public, protected, private 可以理解為作用域的不同
* private只允許類內(nèi)進(jìn)行調(diào)用
* protected允許類內(nèi)以及繼承類內(nèi)進(jìn)行調(diào)用
* public 作用域擴(kuò)展到類外,允許任何地方進(jìn)行調(diào)用
OOP中的繼承思想
OOP中的繼承思想實(shí)例
class Mother
{
public function getEyeCount()
{
return 2;
}
}
class Child extends Mother{
}
$child = new Child();
var_dump($child->getEyeCount());
OOP中的繼承思想
1. 關(guān)鍵詞:extends
2. 目的: 代碼復(fù)用
OOP中的抽象類
OOP中的抽象類實(shí)例
abstract class Shape
{
abstract public function getArea();
}
class Square extends Shape{
private $color;
private $length = 3;
/**
* Square constructor.
* @param $color
*/
public function __construct($color='red')
{
$this->color = $color;
}
public function getArea(){
return pow($this->length, 2);
}
}
class Circle extends Shape{
public function getArea()
{
// TODO: Implement getArea() method.
}
}
$shape = new Circle();
var_dump($shape);
OOP中的繼承思想
抽象類思想:
* 1. 繼承(抽象類最明顯的應(yīng)用場(chǎng)景)
* 2. 抽象類中的抽象方法必須在繼承的類中實(shí)現(xiàn)证芭,強(qiáng)制性統(tǒng)一
* 3. 代碼的重用性更強(qiáng)
抽象類特點(diǎn):
* 1. 抽象類不能直接實(shí)例化
* 2. 抽象類強(qiáng)制實(shí)現(xiàn)抽象方法
OOP中的面向接口編程
OOP中的面向接口編程實(shí)例
interface Logger{
public function save($message);
}
class FileLogger implements Logger{
public function save($message){
var_dump('file logger '.$message);
}
}
class DatabaseLogger implements Logger{
public function save($message){
var_dump('database logger '.$message);
}
}
class UserController{
protected $logger;
/**
* UserController constructor.
*/
public function __construct(Logger $logger)
{
$this->logger = $logger;
}
public function register(){
$user = 'zhenxin';
$this->logger->save($user);
}
}
$user = new UserController(new FileLogger());
$user->register();
OOP中的面向接口編程
* oop中的接口思想
* 實(shí)現(xiàn)接口更好的代碼規(guī)范性
* 封裝性
PHP OOP中的幾個(gè)關(guān)鍵詞
編程實(shí)例
class Math
{
public static function add(...$num)
{
return array_sum($num);
}
}
var_dump(Math::add(1,2,3,4));
class BankAccount
{
const TAX = 0.9;
}
var_dump(BankAccount::TAX);
trait OwnerTrait
{
public function Owner(){
var_dump('Comment owner.');
}
}
class Article{
use OwnerTrait;
}
class Comment{
use OwnerTrait;
}
$article = new Article();
$article->Owner();
PHP OOP中的幾個(gè)關(guān)鍵字
* static
* 靜態(tài)屬性或方法可以直接通過 類名::屬性名或方法名 來直接調(diào)用
* 需要注意的是php中的靜態(tài)屬性是根據(jù)實(shí)例變化瞳浦,
* const 關(guān)鍵字
* const常量
* const聲明的變量值不能改變,無論在類內(nèi)還是類外
* trait
* 實(shí)現(xiàn)代碼重用
* 在別人的代碼中插入自己的代碼