Class lio{
Public
Protect
Private
Function __constructor(){}
}
<?php
class lio{
//定义属性,需要加权限修饰符
public $a="lveo";
//定义方法,需要加权限修饰符
public function running(){
echo 521;
}
public function lovea(){
echo "do something";
}
}
//类的实例化
$name=new lio();
//实例化对象的属性和方法访问
echo $name->a;
$name->lovea();
?>
<?php
class lio{
//定义属性,需要加权限修饰符
public $a="lveo";
//定义方法,需要加权限修饰符
public function running(){
echo 521;
}
public function lovea(){
echo "do something";
}
//不需要权限修饰符 public
function __construct($name){
echo "start";
//$this指实例化的对象
$this->name=$name;
}
function __destruct(){
echo "say goodBye";
}
}
//类的实例化
$name=new lio("sanmei ");
echo $name->name;
?>
对象的赋值和引用,在对象$XXX=null;之后会产生不同结果
<?php
class lio{
public $name=‘lio‘;
public $age=22;
//共有方法
public function love(){
echo "love sanmei";
}
//不需要权限修饰符 public
function __construct($name){
echo "start\n";
//$this指实例化的对象
$this->name=$name;
}
}
//类son继承 lio
class son extends lio{
function __construct($name){
echo "$name".‘1234‘;
}
}
//类的实例化
$name=new son("sanmei");
//继承中,使用父类的方法
$name->love();
?>
<?php
class lio{
public $name=‘lio‘;
public $age=22;
//共有方法
public function love(){
echo "love sanmei";
}
//protect
protected $pro="baohu";
//private
private $pri="siyoude";
//不需要权限修饰符 public
/* function __construct($name){
echo "start\n";
//$this指实例化的对象
$this->name=$name;
} */
}
//类son继承 lio
class son extends lio{
public $pub="pub";
public function getpri(){
echo $pri;
}
//protect
protected $pro="baohu";
//private
private $pri="siyoude";
/* function __construct($name){
echo "$name".‘1234‘;
} */
}
//类的实例化
$name=new son("sanmei");
//public可以访问
echo $name->pub;
//protect只在子类中
//通过public function 实现调用private属性
$name->getpri();
//private 只在本类中
echo $name->pri;//会报错
?>
<?php
class fa{
public $a=123;
protected $b=234;
private $c=345;
public function xie(){
echo $this->c;//必须通过$this 来访问
}
}
class son extends fa{
function __construct(){
$this->xie();
}
}
$na=new fa();
$na->xie();
?>
<?php
class fa{
public $a=123;
protected $b=234;
private $c=345;
public static $d="love you";
public function xie(){
echo $this->c;//必须通过$this 来访问
}
public function ss(){
//在类中静态属性通过self来定义
echo self::$d;
}
public static function dd(){
echo 1234;
}
}
class son extends fa{
function __construct(){
$this->xie();
}
//在子类中用parent来访问 父类的静态变量
//echo parent::$d;
}
//在类外通过类名::直接访问
echo fa::$d;
fa::dd();
//通过对象访问
$na=new fa();
$na->xie();
$na->ss();
静态方法不能用$this来访问
Fatal error: Cannot override final method bs::text() in D:\wamp\www\StudyObj\index.php on line 18
<?php
//如果类前加上final则该类不能被任何类继承的类,可以在class之前添加final
class bs{
final public $a=123;
public function a(){
echo 123;
}
//不能在子类中重写方法
final public function text(){
echo "1231321";
}
}
class son extends bs{
//重写,和父类一致的方法
public function a($temp=‘lio‘){
echo $temp;
}
public function text(){
echo 2345;
}
}
$lio=new son();
$lio->a();
?>
重写过程中用parent::来访问父类中的方法,常量不需要$
<?php
//接口只有方法声明
interface ss{
public function eat($food);
}
//继承接口的类必须实现方法体
class son{
public $a=123;
public function eat($food){
echo "lio eat".$food;
}
}
//继承接口的类必须实现方法体
class sonn{
public $a=123;
public function eat($food){
echo "lio drink".$food;
}
}
$lio=new son();
$li=new sonn();
$lio->eat(‘nice‘);
$li->eat(‘water‘);
var_dump($li instanceof ss);
function check($obj){
if(var_dump($obj instanceof ss)){
$obj->eat(‘lio‘);
}else{
echo "cant eat";
}
}
可以用extends 实现接口继承接口
?>
就是同一个接口,不同类去继承的时候,实现的方法体可能会不一样,这样就造成了多态,极大地提高了灵活性
传入对象不同,实现的方法不同
var_dump($li instanceof ss);
function check($obj){
if(var_dump($obj instanceof ss)){
$obj->eat(‘lio‘);
}else{
echo "cant eat";
}
}
方法可以实现也可以不实现,间与接口和类之间
<?php
//抽象类里的方法可以实现,抽象方法只有声明,没有方法实现,非抽象方法可以有方法体
abstract class lio{
public $a=123;
public function name($name){
echo $name;
}
abstract public function aa(){
echo 132123;
}
}
class son extends lio{
function __construct(){
echo "start";
}
}
$name=new son();
$name->name(‘Lio‘);
?>
当成字符串输出时
<?php
class lio{
function __toString(){
//必须是return
return "12345";
}
}
$name=new lio();
echo $name;
?>
当成方法时
<?php
class lio{
function __toString(){
//必须是return
return "12345";
}
function __invoke($temp){
echo $temp;
}
}
$name=new lio();
$name(5);
?>
<?php
class lio{
//重载
public function __call($name,$arguments){
echo "wo ai sanmei";
}
public static function __callstatic($name,$arguments){
echo "static wo ai sanmei";
}
}
$name=new lio();
$name->asd(‘lio‘,‘lio‘);
lio::res(‘lio‘,‘lio‘);
?>
<?php
class lio{
public function __get($name){
return "123123";
}
public function __set($name){
echo 123123123;
}
}
$name=new lio();
//就像定义了一样去使用
echo $name->time;
$name->time=1231312321313;
?>
属性的重载
<?php
class lio{
public $name=123;
function __clone(){
//在clone的时候不一样
$this->name="love you";
}
}
$name=new lio();
$name->name=‘aaaaa‘;
echo $name->name;
$san=clone $name;
echo $san->name;
$san->name=‘sssssss‘;
echo $san->name;
//使用lone初始化的name,在改变数据但不影响原对象
$mei=clone $name;
?>
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/theowl/article/details/47450855