类与对象
类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."\n";//用this
}
function __construct(){//构造函数,类创建时调用做初始化工作
print '<br>In BaseClass constructor';
}
function __destruct() {//析构函数
print "Destroying " . $this->name . "\n";
}
}
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:\n";
foreach($this as $key=>$value){
print "$key->$value\t";
}
}
}
$class = new PPerson;
echo $class->Man('Pacman');
echo $class->Man('Pacwoman','is');
echo '<br>遍历';
foreach($class as $key=>$value){//foreach键 值用=>
print "$key->$value\t";
}
$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();
?>
梦
浙公网安备 33010602011771号