PHP object-oriented programming
OOP中的一些基本概念
OOP基本概念代码实例
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可以面向过程编程,也可以面向对象编程。
2. 面向对象中类与对象的属性与方法相当于面向过程中的变量与函数。
3. 实例化类就会创建一个对象,实例化的同事会调用类的构造方法'__construct'.
4. $this 的作用相当于动态的指定为该类的实例,使用$this改变属性与调用方法
OOP中的封装思想
OOP中的封装思想代码实例(get与set方法)
第一个编程实例:
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);
第二个编程实例:
class LightSwitch
{
public function on()
{
$this->connect();
}
private function connect()
{
var_dump('connect');
}
}
$light = new LightSwitch();
$light->on();
OOP中的封装思想
1. 封装的目的是
* 一是隐藏信息
* 二可以理解为对外提供接口,例如上例中的get、set方法
2. 对象的某些属性不可以直接操作,操作对象属性时可能会有限制,在类中使用set,get方法可以直接对属性进行限制
3. public、protected、private关键字
* public, protected, private 可以理解为作用域的不同
* private只允许类内进行调用
* protected允许类内以及继承类内进行调用
* public 作用域扩展到类外,允许任何地方进行调用
OOP中的继承思想
OOP中的继承思想实例
class Mother
{
public function getEyeCount()
{
return 2;
}
}
class Child extends Mother{
}
$child = new Child();
var_dump($child->getEyeCount());
OOP中的继承思想
1. 关键词:extends
2. 目的: 代码复用
OOP中的抽象类
OOP中的抽象类实例
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. 继承(抽象类最明显的应用场景)
* 2. 抽象类中的抽象方法必须在继承的类中实现,强制性统一
* 3. 代码的重用性更强
抽象类特点:
* 1. 抽象类不能直接实例化
* 2. 抽象类强制实现抽象方法
OOP中的面向接口编程
OOP中的面向接口编程实例
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中的接口思想
* 实现接口更好的代码规范性
* 封装性
PHP OOP中的几个关键词
编程实例
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中的几个关键字
* static
* 静态属性或方法可以直接通过 类名::属性名或方法名 来直接调用
* 需要注意的是php中的静态属性是根据实例变化,
* const 关键字
* const常量
* const声明的变量值不能改变,无论在类内还是类外
* trait
* 实现代码重用
* 在别人的代码中插入自己的代码
网友评论