PHP中的面向对象⑴:封装、继承、多态

PHP中的面向对象⑴:封装、继承、多态,第1张

  在普通的编程中,没有涉及架构或者良好的设计,绝大多数都是使用的面向过程的方式。

  当编程逐步深入后,就需要合理使用面向对象的知识来设计程序,而不是简单地脑海里有了思路就去写代码来实现,这是比较低级的做法。

  面向对象的三大特点:封装、继承、多态

  封装、继承比较好理解,通过一个例子就能看明白:

width=$width;
		$this->height=$height;
		self::$count=self::$count+1;
		if($name==''||$name==null){
			$this->SetName();
		}else{
			$this->name=$name;
		}
	}
	public function GetName(){
		return $this->name;
	}
	public function SetName(){
		$this->name=self::NamePrefix.$this->GetCount();
	}
	public function GetCount(){
		return self::$count;
	}
	public function GetWidth(){
		return $this->width;
	}
	public function GetHeight(){
		return $this->height;
	}
	public function __destruct(){
		echo "__destruct".$this->GetCount();
	}
}

$obj1=new ActiveX('');
echo $obj1->GetName();
echo "
"; echo $obj1->GetWidth(); echo "
"; echo $obj1->GetHeight(); echo "
"; $obj2=new ActiveX("新的控件",120,60); echo $obj2->GetName(); echo "
"; echo $obj2->GetWidth(); echo "
"; echo $obj2->GetHeight(); echo "
"; ?>

  静态变量的理解,以前我们做C/S开发的时候,拖放控件到设计界面的时候总是能看到控件名字后面的数字是自动累加的,这个就是静态变量在起作用。

  通俗的理解多态就是同样的方法名和参数名实现不同的功能。

  在PHP中通过一个例子就好理解了。

  1、通过接口演示

SaveAs();
	}
}

app::EndEdit(new ExcelObj());
echo "
"; app::EndEdit(new WordObj()); echo "
"; app::EndEdit(new PptObj()); echo "
"; class TxtObj{ public function SaveAs(){ echo "编辑Txt的保存"; } } app::EndEdit(new TxtObj()); ?>

  2、通过(抽象)类演示

SaveAs();
	}
}

app::EndEdit(new ExcelObj());
echo "
"; app::EndEdit(new WordObj()); echo "
"; app::EndEdit(new PptObj()); echo "
"; class TxtObj{ public function SaveAs(){ echo "编辑Txt的保存"; } } app::EndEdit(new TxtObj()); ?>

  可以看到,最后的TxtObj因为有SaveAs方法,也得到了正确的执行。

  我们可以加类型限制:

class app{
	public static function EndEdit(EditObj $obj){
		$obj->SaveAs();
	}
}

  这样的话,最后的app::EndEdit(new TxtObj());就会报错了。

  还可以加类型判断:

class app{
	public static function EndEdit($obj){
		if($obj instanceof EditObj){
			$obj->SaveAs();
		}else{
			echo "输入的类型错误,不能执行!";
		}
		
	}
}

  这样事先的错误截断对用户就会好一些。

  对于上面的接口也一样可以这样来做,代码也一样。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1321078.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-11
下一篇 2022-06-11

发表评论

登录后才能评论

评论列表(0条)

保存