php黑魔法
@ Zhang zhiyang · Monday, Jan 1, 0001 · 3 minute read · Update at Monday, Jan 1, 0001

php面向对象

访问控制

public

  • 可以通过$this调用public方法或属性,parent::调用父类的public方法或属性
  • 在实例中可以能过$obj-> 来调用public类型的方法或属性

protected

  • 可以通过$this调用protected方法或属性,parent::调用父类的protected方法或属性
  • 在实例中不能通过$obj->来调用protected类型的方法或属性
<?php
class MyClass{
    public $test = 'test';

    protected function show1(){
        echo $this->test;
    }
    public function test1(){
    	$this->test;
    }
}

class Child extends MyClass{
    public function index(){
        parent::show1();
        $this->show1();
    }
}

$class = new MyClass;
$child = new Child;
// $class->show1();Fatal error
$class->test1();
$child->index();

private

  • 该类型的属性或方法只能在该类中使用
  • 在该类的实例、子类中、子类的实例中都不能调用私有类型的属性和方法
<?php
class MyClass{
    public $test = 'test';

    private function show2(){
        echo $this->test;
    }
    public function test2(){
    	$this->show2();
    }
}

$class = new MyClass;
$class->test2();

关键字

self、$this、parent

  • this是指向当前对象的指针
  • self是指向当前类的指针
  • parent是指向父类的指针

const、static

  • const定义常量
  • static定义静态变量

conststatic都属于类,可以直接从类调用(静态调用) 静态方法和静态变量是公共的,不会涉及到太多的逻辑,内部不可以用$this

<?php
class Test{
	const AGE = 18;
	public static $age = 18;
	public static function getAge(){
		// return $this->$age;Fatal error
		return self::$age;
	}
}

echo Test::AGE;
echo Test::$age;
echo Test::getAge();

抽象类

abstract用于定义抽象方法和抽象类。

抽象方法:

抽象方法指没有方法体的方法,在方法声明事没有{}括弧以及其中的内容,而是直接在声明了方法后加上分号结束。

抽象类:

只要一个类中有一个方法是抽象方法,那么这个类就要定义为抽象类,抽象类同样用abstract关键字来定义。 抽象类不能产生实例对象,通常是将抽象方法作为子类方法重载的模板使用,且要把继承的抽象类里的方法都实现。

<?php 
// 定义抽象类
abstract class Individual{
	public $age = 18;
	abstract function getAge();
	public function test(){
		echo 'test';
	}
}

class Person extends Individual{
	public function getAge(){
		return $this->age;
	}
}

$person = new Person;
$person->test();
echo $person->getAge();

接口

接口是一种规范,接口里的方法和抽象方法一样(不需要实现),implements的子类必须实现全部接口 如果一个抽象类里面的所有方法都是抽象方法,且没有声明变量,而且接口里面所有成员都是public权限的,那么这种特殊的抽象类就是接口。

应用场景:

  • 保持规范、统一性
  • 多个类需要实现同样的方法,只是实现方式不一样

接口使用规范:

  • 接口不能实例化
  • 接口属性必须是常量
  • 接口方法必须是public,且不能有函数体
  • 类必须实现接口的所有方法
  • 一个类可以同时实现多个接口,用逗号隔开
  • 接口可以继承接口,使用extends关键字。
  • 接口使用关键字interface来定义,使用implements关键字来实现
  • 类要实现接口,必须使用和接口中所定义的方法完全一致的方式。否则会导致致命错误.
  • 实现多个接口时,接口中的方法不能有重名。
<?php
<?php
// 定义接口
interface Individual{
	public function eat();
	public function drink();
}
// 接口实现
class Person implements Individual{
	public function eat(){
		echo '炸鸡';
	}
	public function drink(){
		echo '可乐';
	}
}

$person = new Person;
$person->eat();
$person->drink();

php
Save as image
Zhang zhiyang's blog
不过是些许风霜罢了
c cyber http linux math mysql php python 前端

© 2016 - 2022 Zhangzhiyang的博客

Powered by Hugo with theme Dream.

我听别人说这世界上有一种鸟是没有脚的,它只能够一直的飞呀飞呀,飞累了就在风里面睡觉,这种鸟一辈子只能下地一次,那一次就是它死亡的时候。

日程

Zhangzhiyang的 ❤️ 博客

其他

如果你喜欢我的开源项目或者它们可以给你带来帮助,可以赏一杯咖啡 ☕ 给我。~

If you like my open source projects or they can help you. You can buy me a coffee ☕.~

PayPal

https://paypal.me/g1eny0ung

Patreon

Become a Patron!

微信赞赏码

wechat

最好附加一下信息或者留言,方便我可以将捐助记录 📝 下来,十分感谢 🙏。

It is better to attach some information or leave a message so that I can record the donation 📝, thank you very much 🙏.