个人博客
专注IT梦想的地方

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

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

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

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

那么先讲讲封装

封装

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

<?php
    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中的也是差不多的。

如下:

<?php
class A{
    public function method(){
        echo '我是方法A';
    }
}
class B extends A{
    public function methodTwo(){
        echo '我是方法B';
    }
}
$b = new B();
$b->method();
$b->methodTwo();
?>

继承需要注意几点:

  1. 子类最多只能继承一个父类(指直接继承);
  2. 子类可以继承其父类(或者超类)的public、protected修饰的变量(属性)和函数(方法);
  3. 在创建某个子类对象时,默认情况下会自动调用其父类的构造函数。
  4. 如果在子类中需要访问其父类的方法(构造方法/成员方法 方法的访问修饰符是public/protected),可以使用父类::方法名(或者parent::方法名)来完成。
  5. 如果子类(派生类)中的方法和父类(基类)方法相同,我们称为方法重写/方法覆盖。

当然了,因为目前更新版本的问题,我所学的版本是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 ,那么是这样写的:

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

赞(0) 打赏
未经允许,不得转载本站任何文章:智言个人博客 » 关于php中面向对象的三大特征(封装/继承/多态)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏