美文网首页
PHP OOP编程从入门到不会

PHP OOP编程从入门到不会

作者: zhenx1n | 来源:发表于2018-10-14 20:58 被阅读0次

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中的几个关键词

编程实例
  •  static关键字
    
class Math
{
    public static function add(...$num)
    {
        return array_sum($num);
    }
}

var_dump(Math::add(1,2,3,4));
  •  const关键字
    
class BankAccount
{
    const TAX = 0.9;
}

var_dump(BankAccount::TAX);
  •  trait 关键字
    
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
     *   实现代码重用
     *   在别人的代码中插入自己的代码

相关文章

网友评论

      本文标题:PHP OOP编程从入门到不会

      本文链接:https://www.haomeiwen.com/subject/eketzftx.html