失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > php对象的三大特征 关于php中面向对象的三大特征(封装/继承/多态)

php对象的三大特征 关于php中面向对象的三大特征(封装/继承/多态)

时间:2020-09-17 16:52:04

相关推荐

php对象的三大特征 关于php中面向对象的三大特征(封装/继承/多态)

最近在学习php的过程中发现它其实比java的语言要松散很多,而且很多人说上手比较容易,但是智言我个人并不是很认同这样的观点,因为其实java的整个语法规则都非常的有条有理,虽然函数很多,但是至少经常用到的也就是那么一些,而在php中虽然函数比不上java,但是整个php的语法感觉比java要松散而混乱,所以相比来说,我认为java比php要好学一些。当然,这也有可能是我先学习了java然后再去学php的原因。

首先说说php中的三大特征,三大特征和java中是一样的,分为封装、继承、多态,同样还有另外一个学习点,就比如覆盖和重写。

覆盖和重写和java中是一样的,我这里就不多讲。

那么先讲讲封装

封装

php中的封装可以说也是和java中的封装是差不多的,只是,在php中又另外提供了一个魔术函数 __set 和 __get方法,而设计者本身也不推荐使用,我个人也还是喜欢像java中的封装,毕竟已经非常熟练了。

private $name;

private $age;

public function setName($name){

$this->name = $name;

}

public function getName(){

return $this->name;

}

public function setAge($age){

$this->age = $age;

}

public function getAge(){

return $this->age;

}

?>

然后大家就可以通过提供的公共方法来调用和赋值了。

而魔术函数 __set 和 __get方法由于创建者都不推荐,所以这里就不多说,有兴趣的朋友可以在百度里进行自行搜索,谢谢。

继承

对于继承而言其实和java中的也是差不多的。

如下:

class A{

public function method(){

echo '我是方法A';

}

}

class B extends A{

public function methodTwo(){

echo '我是方法B';

}

}

$b = new B();

$b->method();

$b->methodTwo();

?>

继承需要注意几点:

子类最多只能继承一个父类(指直接继承);

子类可以继承其父类(或者超类)的public、protected修饰的变量(属性)和函数(方法);

在创建某个子类对象时,默认情况下会自动调用其父类的构造函数。

如果在子类中需要访问其父类的方法(构造方法/成员方法 方法的访问修饰符是public/protected),可以使用父类::方法名(或者parent::方法名)来完成。

如果子类(派生类)中的方法和父类(基类)方法相同,我们称为方法重写/方法覆盖。

当然了,因为目前更新版本的问题,我所学的版本是5.3的版本,所以在最新的版本中智言还没有去研究,所以还会继续去看看研究的。

多态

至于多态,那就基本上和java中是不一样的啦,因为在java中,多态是这样写的。

class ZhiYan{

void method(){

System.out.println("我是方法一");

}

void method(int a){

System.out.println("我是方法二");

}

void method(int a,int b){

System.out.println("我是方法三");

}

}

ZhiYan zhiyan = new ZhiYan();

zhiyan.method();

zhiyan.method(5);

那么在java中会根据你传递的参数在自动选择需要匹配的方法,而在php中是不支持这样的方法,不知道php7中会不会有所改动…

php中依然要用到魔术方法 __call ,那么是这样写的:

class Reload{

public function test1($a){

echo "test1..";

}

public function test2($a,$b){

echo "text2---".$a.$b;

}

//这里提供一个魔术函数 __call

public function __call($method,$a){

if($method=="test"){

if(count($a)==1){

$this->test1($a);

}else if(count($a)==2){

$this->test2($a);

}

}else{

echo '没有匹配到你需要的方法';

}

}

}

$load = new Reload();

$load->test(1);

?>

所以在学习php过程中,如果你没有编程基础,我想会更容易上手吧,至少不会混乱,而如果学习过其他语言,你的优势更多的将是你上手会很快,而你学到后面,有时候总结不到位,会学的混乱一些。

如果觉得《php对象的三大特征 关于php中面向对象的三大特征(封装/继承/多态)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。