自动加载类的知识点整理
//__tostring()方法
class Ren //造一个人类,里面有成员变量$name
{
public $name;
}
$r = new Ren();
echo $r;
//写出echo $r;命令是想输出刚造的对象$r,因为$r是人类里面的一个对象,因为直接输出是输出一个对象,这个对象没法直接输出来,因为它是一个对象类型不是个字符串类型所以该程序会报错。
//如果想在输出这个对象的时候不报错,而是显示一下这个类里面的信息。那就得在这个类里面加上一个方法。
class Ren
{
public $name;
public function __tostring() //加了__tostring()方法后,可以“输出该类是人类,name代表姓名”,这句话。这样就可以说明
{ //这个__tostring()方法是用来我们在输出这个对象的时候,能够有输出内容不报错。而且这个
return "该类是人类,name代表姓名"; //输出内容里面,我们可以简单地描述一下这个类这个对象是干什么用的,
} //这个对象里面包含哪些成员,分别是做什么用的
}
$r = new Ren();
echo $r;
//克隆对象
class Ren
{
public $name ="张三";
}
$r= new Ren;
$c= clone $r; //又造了一个对象$c,这个$c是由前面已经造过的$r克隆来的,使用关键字clone.所以克隆来的$c与前面$r
echo $c->name; //具有相同的东西。克隆来的$c和$r是一模一样的。相当于我们把这个对象复制了两份。
//我在克隆出这个对象之后,我想修改一下这个对象里面的内容。也就是修改里面的成员变量name
//我们可以在克隆完之后,用对象调用它里面的成员变量来更改name的值。
$r= new Ren;
$c= clone $r;
$c->name = "李四"; //
//还可以在克隆的同时把它改掉。此时需要在这个类里面加上一个方法。
class Ren
{
public $name ="张三";
public function __clone() //这个方法叫做克隆的方法。 在执行$c= clone $r;的时候会自动调用这个方法来执行,那么就可以在这个方法里面
{ //加上一些东西了,想把它名字给变了就在这个方法里面操作name就行
$this->name = "李四"; //在这个花括号里面,$this代表的是副本对象,也就是$this代表$c 原来的那个对象$r没有变化,
} //也就是$r的name值还是张三对原本没有进行改动,改动的是副本的name值。
}
$r= new Ren;
$c= clone $r;
echo $c->name;
//加载类
//第一种方法:用include 先建立一个php文件,名字改为 类名.class.php的形式。然后再将它保存在想要访问它的同一文件夹内。将这个文件里面的代码全部删除只写以<?php 开头的内容。然后再在想要访问这个类的文件里面使用include();函数来进行加载。 其中括号里面写路径地址,也就是写类文件的地址。因为这两个文件是在同一个文件夹内的所以可以根据相对路径来找就可以了。相对路径:用./ 其后面再写这个类文件的文件名。
include("./Ren.class.php");
$r= new Ren(); //命令为造一个对象$r
echo $r->name; //输出一下这个刚造的对象调用的name成员变量。
//第二种用include();的方法。
include "./Ren.class.php"; //第二种方法跟第一种差不多也是用include后面加空格再加分号里面写相对路径。include "./Ren.class.php";
$r= new Ren;
echo $r->name;
//第三种方法使用关键字require 请求的意思,请求到当前页面。
require("./Ren.class.php");
$r= new Ren();
echo $r->name;
//第四种方法是使用require后面直接写路径。
require "Ren.class.php"; //跟include使用方法一样。
$r=new Ren;
echo $r->name;
//第五种方法
require_once("./Ren.class.php"); //require_once当前页面请求一次。
//第六种方法
require_once "./Ren.class.php";
//一共有六种方法可以把这个类加载到当前页面。
//require与require_once的区别:
//不能同时进行两个require的请求,但可以使用两个require_once来请求。因为如果使用两个require_once,它就只会执行一个require_once.
//最好一般使用require_once来做请求。因为它可以防止我们重复引入。
//include("./Ren.class.php"); 与 require("./Ren.class.php"); 的区别:
//include是把整个类里面的内容全部拿到当前页面来,就相当于把那个类文件整个拷过来了。而这个require仅仅是去请求一些内容。所以这两个的区别就在于,如果用的是include,那如果这个类里面有问题的话,整个当前的页面程序就会崩溃。而如果是使用require的话,即使这个类有点问题,整个当前的页面的程序也不会因为他的问题而崩溃。 这就是include和require的区别。
//自动加载类
//使用一个方法来自动加载类文件
//1.所有的类文件写在同一个目录下
//2.类文件的命名规则要一致
//3.类的文件名要和类名保持一致l
function __autoload($classname)
{
require_once("./".$classname.".class.php");
}
$r =new Ren();
echo $r->name;