• 类与对象


    类与对象

    类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();
    ?>
    
  • 相关阅读:
    类和接口的区别
    ref 和out的区别
    重载 重写 多态区别
    UML种类与类的关系
    Window.open() 全攻略
    C#委托
    RT Diagnostics Routines
    tar.bz2 解压命令。
    教你10招最有效防电脑辐射方法
    预处理,编译, 优化, 汇编, 链接
  • 原文地址:https://www.cnblogs.com/dreamtosky/p/13402299.html
Copyright © 2020-2023  润新知