类与对象

类与对象

类与对象

类class 属性有public protected private,const定义类常量extends继承,__construct构造,__destruct,代码利用trait,

abstruct,抽象类,interface接口,implements接口实现

类可用foreach遍历属性

<?php
class a{
	public $pu = "abc";//公共的 属性关键字由public,protected,private声名,后面跟普通变量,初始化必须是常数
	protected $pro = "pro";//受保护的
	private $pri="pri";//私有的
	const constant = "constant value";//定义类常量
	function printHello(){
		echo $this->pu;
		echo $this->pro;
		echo $this->pri;
		var_dump($this);
	}
	function showcontant(){
		echo self::constant."
";//用this
	}
	function __construct(){//构造函数,类创建时调用做初始化工作
		print '<br>In BaseClass constructor';
	}
	function __destruct() {//析构函数
       print "Destroying " . $this->name . "
";
   }
}
class b extends a{
	function __construct(){//继承的construct
		parent::__construct();
		print '继承的construct';
	}
}
class c extends a{};//如果子类中定义了构造函数则不会隐式调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 子类没有定义构造函数则会如同一个普通的类方法一样从父类继承(假如没有被定义为 private 的话)
echo a::constant;//范围解析操作符可以用于访问静态成员,类常量,还可以用于覆盖类中的属性和方法。 $cl=new a();//新建类要new $cl->showcontant(); $cl=new b(); $cl=new c(); echo '<br>访问控制<br>'; $obj = new a(); echo '<br>'; echo $obj->pu;//只用公共可以在外部调用 //echo $obj->pro;//保护 //echo $obj->pri;//私有 $obj->printHello(); ?>
<?php//自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 trait。
class a{
	public function sayHello(){
		echo 'hello';
	}
}
trait Sayword{
	public function sayHello(){
		parent::sayHello();
		echo 'word!';
	}
}
class SayHW extends a{
	use Sayword;
}
$o=new SayHW();
$o->sayHello();
trait SayH{
	public function say(){
		echo 'hello word';
	}
}
class at{
	use SayH;
	public function say(){
		echo 'hello trait';
	}
}
$oo=new at();
$oo->say();
?>
<?php
abstract class Person{//任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的
	abstract protected function Man($name);//定义抽象类abstract protected且不能实例化
}
class PPerson extends person{
	function Man($name,$sex='.'){ // 我们的子类可以定义父类签名中不存在的可选参数
		   if ($name == "Pacman") {
            $prefix = "Mr";
        } elseif ($name == "Pacwoman") {
            $prefix = "Mrs";
        } else {
            $prefix = "";
        }
        return "{$prefix}{$sex} {$name}";
	}
	public $var1='var1';
	public $var2='var2';
	
	protected $pro='pro';//受保护只能内部访问
	private $pri='pri';//私有同上
	function Foreac(){
		echo "MyClass::iterateVisible:
";
		foreach($this as $key=>$value){
			print "$key->$value	";
		}
	}
}
$class = new PPerson;
echo $class->Man('Pacman');
echo $class->Man('Pacwoman','is');
echo '<br>遍历';
foreach($class as $key=>$value){//foreach键 值用=>
	print "$key->$value	";
}
$class->Foreac();
var_dump($class);
?>
<?php
interface a{//接口声名interface
	public function Pr();
}
interface b{
	public function Pr2();
}
interface c extends a,b{//继承extends
	public function baz();
}
class foo implements c{
	public function Pr(){
		echo 'Pr';
	}
	public function Pr2(){
		echo 'Pr2';
	}
	public function baz(){
		echo 'bax';
	}
}
$class=new foo;
var_dump($class);
$class->baz();
?>