zoukankan      html  css  js  c++  java
  • PHP 类与对象 全解析方法

    1.类与对象

    对象:实际存在该类事物中每个实物的个体。$a =new User(); 实例化后的$a

    引用�php的别名,两个不同的变量名字指向相同的内容

    封装: 把对象的属性和方法组织在一个类(逻辑单元)里

    继承:以原有的类为基础,创建一个新类,从而代码复用的目的;

    多态:允许将子类类型的指针赋值给父类类型的指针。

    -------------------------------------

    2.自动加载对象:

    自动加载通过定义特殊的__autoload函数,当引用没有在脚本中定义的类时会自动调用这个函数.

    1 [php] view plaincopyprint?

    2 function __autoload($class){

    3 require_once("classes/$class.class.php");

    4 }

    为什么要使用__autoload

    1,首先是不知道这个类文件存放在什么地方,

    2,另外一个就是不知道什么时候需要用到这个文件。

    3,特别是项目文件特别多时,不可能每个文件都在开始的部分写很长一串的 require …

    替代了一

    require_once ("classes/Books.class.php") ;

    require_once ("classes/Employees.class.php" ) ;

    require_once ("classes/Events.class.php") ;

    require_once ("classes/Patrons.class.php") ;

    zend推荐了一种最流行的办法,在文件名中包含路径。例如下面的例子:

    1 [php] view plaincopyprint?

    2

    3 view sourceprint?

    4 // Main.class

    5 function __autoload($class_name) {

    6 $path = str_replace('_', DIRECTORY_SEPARATOR, $class_name);

    7 require_once $path.'.php';

    8 }

    temp = new Main_Super_Class();

    所有的下划线都会被替换成路径中的分隔符,上例中就会去 Main/Super/Class.php文件。

    缺点:

    是在编码过程中,必须明确的知道代码文件应当所处的位置,

    而且由于将文件路径硬编码在了类名中,如果需要修改文件夹的结构时,我们必须手工修改所有的类名。

    如果是在一个开发环境中,并且对于速度不是很在意的话,使用'Include All’这个方法是非常方便的。

    通过将所有类文件放在一个或几个特定文件夹中,然后通过遍历的方式查找加载。

    例如

    <?php

    $arr = array (

    'Project/Classes',

    'Project/Classes/Children',

    'Project/Interfaces'

    );

    foreach($arr as $dir) {

    $dir_list = opendir($dir);

    while ($file = readdir($dir_list)) {

    $path = $dir.DIRECTORY_SEPARATOR.$file;

    if(in_array($file, array('.', '..')) || is_dir($path))

    continue;

    if (strpos($file, ".class.php"))

    require_once $path;

    }

    }

    ?>

    另外一个方法是在类文件和他的位置之间建立关联的配置文件,例如:

    view sourceprint?

    // configuration.php

    array_of_associations = array(

    'MainSuperClass' = 'C:/Main/Super/Class.php',

    'MainPoorClass' = 'C:/blablabla/gy.php'

    );

    调用的文件

    <?php

    require 'autoload_generated.php';

    function __autoload($className) {

    global $autoload_list;

    require_once $autoload_list[$className];

    }

    $x = new A();

    ?>

    3.构造函数和析构函数

    PHP 构造方法 __construct() 允许在实例化一个类之前先执行构造方法。

    构造方法是类中的一个特殊方法。当使用 new 操作符创建一个类的实例时,构造方法将会自动调用,其名称必须是 __construct() 。

    (在一个类中只能声明一个构造方法,而是只有在每次创建对象的时候都会去调用一次构造方法,不能主动的调用这个方法,

    所以通常用它执行一些有用的初始化任务。该方法无返回值。)

    作用: 用来创建对象时初始化对象

    子类执行分类的构造函数parent::__construct().

    析构函数: __destruct ()定义:特殊的内成员函数,没有返回类型,没有参数,不能随意调用,也没有重载;

    只是在类对象生命结束的时候,由系统自动调用释放在构造函数中分配的资源。

    与构造方法对应的就是析构方法,析构方法允许在销毁一个类之前执行的一些操作或完成一些功能,比如说关闭文件、释放结果集等。

    析构函数不能带有任何参数,其名称必须是 __destruct() 。

  • 相关阅读:
    【CF732D】Exams(线性扫描,贪心,二分)
    【CF652C】Foe Pairs(线性扫描)
    【CF645D】 Robot Rapping Results Report(拓扑排序,二分)
    【BZOJ入门3189】 猜数字(数学,搜索)
    【CF559C】 Gerald and Giant Chess(计数,方案数DP,数论)
    【NOIP2016练习&BZOJ2125】T3 sp (树上倍增,最短路)
    【NOIP2016练习】T2 forest (树形DP,数论)
    【NOIP2016练习】T2 花花的聚会 (树形DP,倍增)
    【CF713C】Sonya and Problem Wihtout a Legend(离散化,DP)
    js函数知识点
  • 原文地址:https://www.cnblogs.com/2881064178dinfeng/p/7323962.html
Copyright © 2011-2022 走看看