`
sjkgxf7191
  • 浏览: 250965 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

PHP 学习小结(四)—— PHP 面向对象开发

阅读更多

1. 建立类

class MyPc {
    var $key;
    // 建议使用public,而不是var
    public $name;
    
    public function vod() {
        echo "PHP 100 视频教程";
    }
}
// 输出PHP 100 视频教程
$pc1 = new MyPc();
$pc1->vod();

 

2. 对象中的$this关键字、__construct()构造函数和析构函数__destruct()
PHP4 的时候使用function MyPc() 进行初始化

 

class MyPc {
    public $name;
    
    function __construct($name) {
        $this->name = $name;
    }
    
    public function vod() {
        //echo "PHP 100 视频教程";
        echo $this->name;
    }

    // 规则:后进先出:先释放后建立的对象
    // 垃圾回收机制
    function __destruct() {
        // ...
    }
}
// 输出PHP 100 视频教程
$pc1 = new MyPc("PHP 100 视频教程");
$pc1->vod();

 
3. 类的封装和应用
封装关键字:public, protected, private
封装相关函数:

private $name;
function __set($name, $value) {
    $this->$name = $value;
}
function __get($name) {
}
// 赋值
$pc1->name = "sss";
// 取值
echo $pc1->name;

 

4.  类的继承和应用
继承关键字:extends
重载:

class Root {
    function dayin() {
        return "Root print <br>";
    }
}
class Son extends Root {
    function dayin() {
        // 重载dayin()函数
        return Root::dayin()."Son print<br>";
    }


}
// 输出Root print
//      Son print
$p = new Son();
echo $p->dayin();

 

5. 类的抽象方法和类
一个类中至少有一个 方法是抽象的
不可实例化 ,只能用它的继承类来实例化
抽象方法不允许有{}
抽象关键字:abstract

abstract class cl1{
    abstract function fun1();
}
class cl2 extends cl1 {
    function fun1() {
        echo "第一个";
    }
}

 

6. 类中常用关键字
关键字:final
当定义 的时候该类将不能被继承 ,当用来定义方法 的时候该方法将不能被重载

关键字:self

  • 用来用类访问当前类中的内容的关键字,类似与$this 关键字,但$this是需要类实例化以后才可以使用,self 可以直接访问 当前类中的内部成员
  • self一般用来访问类中的:静态成员常量 ,或者其他定义内容

关键字:static

  • 用来定义类的静态属性或方法,可以在类未被实例化 时使用,静态属性单独占用内存而不会因创建多个对象时而导致同样的方法或者属性重复占用。
  • 静态方法内部禁止出现非 静态内容
  • $this不能访问 静态属性

关键字:const
用来定义类中的常量,类似PHP外部定义常量 的关键字define()

const只能修饰类当中的成员属性

建议大写 常量

常量不使用$ 符号

 

final class MyPc {
    // 静态属性
    static $name = "我的电脑";
    // 常量
    const USER = "我的";
    final function power() {
        echo self::$name."电脑开机中......"."<br>";
        echo self::USER;
    }
}
$p = new MyPc();
$p->power();
//  直接访问静态属性
echo MyPc::$name;

 

7. 类中接口的应用
继承 接口, 继承 接口
关键字:interface、implements
抽象类:
1、类中至少有一个抽象方法
2、抽象方法前需加abstract
接口:
1、类中全部为抽象方法
2、抽象方法前不用加abstract
3、接口抽象方法属性为public
4、成员属性必须为常量
共同点:
1、本身都不能被实例化,必须被继承或者引用
2、继承或者引用后,需要把所有抽象方法重载方可使用

interface demo {
    const NAME = "名称";
    function fun1();
}
interface demo2 {
    function fun2();
}
class mypc implements demo, demo2 {
    function fun1() {
        echo "======";
    }
    function fun2() {
        echo "======";
    }
}

 

8. 类中多态的应用
instanceof 用来测定一个给定的对象是否来自 指定的对象类

class A {}
class B {}
$thing = new A;
if ($thing instanceof A) {
    echo 'A';
}
if ($thing instanceof B) {
    echo 'B';
}

 

9. 总结篇
对象描述的配置__tostring()

class My {
    function __tostring() {
        echo "test";
    }
}
$p = new My();
echo $p;

 

对象方法的异常处理__call($funname, $arr_value)

// 调用一些不存在的对象方法的异常处理,使程序继续正常运行
class My {
    function __call($n, $v) {
        echo "错误的方法名".$n;
        echo "错误的参数".print_r($v);
    }
}

 

克隆对象的应用__clone()

class My {
    function __clone() {
        echo "克隆时自动调用的函数";
    }
}
$a = new My();
$b = clone $a;

 

自动载入对象的方法__autoload()

// 快速取得对象名称并自动载入进当前页面
function __autoload($class_n) {
    // include("mypc.php");
    include($class_n.".php");
}
$p = new Mypc();
$d = new demo();
 
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics