最基本认识==(php100-18)
对象初始化、方法定义、析构、实例化
__construct对对象进行初始化;__destruct析构函数:用this调用到该类中的任何对象方法【实例】:
class MyPc{
public $name;
public $type;
//对象属性,进行了初始化。
function __construct($name ,$type ){
$this->name=$name;
$this->type=$type;
}
//对象方法
function internet(){
return "我在用".$this->name.$this->type."上网!";
}
function game(){
return $this->internet(). "正在玩游戏!" ;
}
//析构函数
function __destruct(){
echo "
这里将“".$this->name.$this->type."”进行了析构......
";
}
}
//进行实例化
$pc1=new MyPc('家用电脑','是笔记本,');
//$pc2->name="家用电脑";
$pc2=new MyPc('公司电脑','是台式机');
echo $pc1->game()."
";
echo $pc1->internet()."
";
//echo $pc1=null; 手动析构
封装的关键字的使用==(php100-19)
private、__get()、__set()
在set()中,第一个是对象属性的名称($n对应的是name),第二个是对象属性的值($value 对应的是下面中心赋值的name即:$pc1->name="888";)。
【实例】:
class MyPc{
private $name;
function __construct($name=''){
return $this->name=$name;
}
function __get($name){ //获取私有属性的name
return $this->name."
";
//return $this->name = "(将真实姓名替换为用于掩饰的)笔名
";
}
function __set($n,$value){//在set()中,第一个是对象属性的名称($n对应的是name),第二个是对象属性的值($value对应的是下面中心赋值的name即:$pc1->name="888";)if($value>"100"){ //限制私有属性访问条件
$this->$n=$value;
}
}
private function power(){
return $this->name."打开电源,正在开机....";
}
function ok(){
return $this->power()."开机成功!
";
}
}
$pc1=new MyPc("我的电脑");
$pc1->name="888";
echo $pc1->name;
echo $pc1->ok();
类的继承和应用==(php100-20)
【实例】:
class Root{
protected function dayin(){
return "父类的方法";
}
}
class Son extends Root{
//function dayin2(){
function dayin(){
//return $this->dayin(). "Son print
"; 这里是继承
return parent::dayin()."(获取父类方法)"."子类的方法
"; //取出父类原始数据
}
}
$p=new Son();
//echo $p->dayin2();
echo $p->dayin();
类的抽象方法和类==abstract(php100-21)
抽象类只能被继承,然后每个方法都要被实例化,不可直接在抽象类中实例化【实例】:
abstract class cl1{
abstract function fun1();
abstract function fun2();
function fun3(){
echo "fun3()在抽象类中,这个不是抽象方法,所以不用重载。";
}
}
class cl2 extends cl1{
function fun1(){
echo "第一个重载了!(重载后的类,实例化后就可以访问方法了)
";
}
function fun2(){
echo "第二个重载了!";
}
}
$p=new cl2(); //这里将继承后的的类进行了实例化
$p->fun1();
$p->fun3();
类中的常用关键字==(php100-22)
final:锁的功能,使类无法继承、使方法无法重载;
self:直接访问当前类的成员(静态成员和常量),不必像this一样先进行实例化才能使用static:静态成员,再类未被实例化就可以使用,this不可访问,可用self访问
const:定义类中的常量,类似于php外部定义常量的关键字define,const只能修饰类当中的成员属性
【实例】:
final class MyPc{
static $name="我的电脑";
const NAME="你的电脑";
final function power1(){
echo self::$name."正在开机中....
";
}
static function power2(){
echo self::NAME."正在开机中....
";
}
}
$p=new MyPc();
$p->power1(); //访问不可被继承的类
MyPc::$name="你的电脑";
echo MyPc::power2();
接口==(php100-23)
interface用于创建接口;implementS可以将接口引用到普通的类中
【实例】:
interface demo1{
const NAME="姓名";
function fun1();
}
interface demo2{
function fun2();
}
class MyPc implements demo1, demo2{ //单继承多接口
function fun1(){
echo "重载接口dem1中的抽象方法一
";
}
function fun2(){
echo "重载接口dem2中的抽象方法二
";
}
}
$p=new mypc(); //实例化
$p->fun1();
echo MyPc::NAME."继承接口dem1后可以从自己的类中访问接口中的常量了
";
interface demo3{
const PLAY="游戏播放
";
function fun3();
}
class MyPs extends MyPc implements demo3{ //先继承后引用
function fun3(){
echo "重载接口dem3中的抽象方法三
";
}
}
$w=new MyPs();
$w->fun3();
echo MyPs::PLAY."继承接口dem3后可以从自己的类中访问接口中的常量了
";
类中多态的应用==(php100-24)
instanceof 测定一个给定的对象是否是来自指定的对象类
简单测试
class A{}
class B{}
$thing=new A;
if($thing instanceof A){
echo $A="实例化了A
";
}
if($thing instanceof B){
echo $B="实例化了B
";
}*/
-----------------------------------------
interface myusb{
function type();
function alert();
}
class zip implements myusb{
function type(){
echo "2.0";
}
function alert(){
echo "正在检查U盘驱动...";
}
}
class mp3 implements myusb{
function type(){
echo "1.0";
}
function alert(){
echo "正在检查MP3驱动...
";
}
}
class mypc{
function pcusb($what){
$what->type()."
";
$what->alert()."
";
}
}
$p=new mypc(); $zip=new zip(); $mp3=new mp3();
$p->pcusb($zip)."
";
$p->pcusb($mp3)."
";
总结篇==(php100-25)
__tostring 直接打印句柄,从而获得该方法的基本信息或其他内容
__call($n,$v)调用一些不存在的对象方法的异常处理(吸收错误内容,$n错误的方法名,$v 错误的方法的值)
__clone()通过克隆的防治我们可以在内存中生成两个一样的对象
__autoload快速取得对象名称并且自动载入当前页面
【实例】:
class My{
public $name="物品的类";
function __tostring(){
return $this->name."这是个空类!";
}
function __call($n,$v){
echo "不存在的方法是".$n."类";
echo "错误的值是".print_r($v)."(由__call 提示出错地方)
";
}
function __destruct(){
echo "
清理一个对象";
}
function __clone(){
$this->name="你的类";
}
}
function __autoload($name){
include("$name.php");
}
$p=new My();//实例化
echo $p."(因为有__tostring 可以直接访问了)
";
//有__call 提示出错的地方了
$p->demo("第一",6,543);
$b=clone $p; //克隆出$b
echo $b->name."(克隆出的对象、同时修改了值)";
//自动载入,$name就是new出来的实例名
/*$d=new source();
$d->fun1(); */
制作自己的PHP+Mysql的类
class mysql{
private $host;
private $name;
private $pass;
private $table;
private $ut;
//初始化
function __construct($host,$name,$pass,$table,$ut){
$this->host=$host;
$this->name=$name;
$this->pass=$pass;
$this->table=$table;
$this->ut=$ut;
$this->connect();
}
function connect(){
$link=mysql_connect($this->host,$this->name,$this->pass) or die($this->error());
mysql_select_db($this->table,$link) or die("没有该数据库:".$this->table);
mysql_query("SET NAMES '$this->ut'");
}
function query($v){
return mysql_query($v);
}
function error(){
return mysql_error();
}
function fn_insert($table, $name, $value){
$this->query("insert into $table ($name) value($value)");
}
}
$db=new mysql('localhost', 'root', '', 'wanglu','utf8');
$db->fn_insert('w_login', 'id,ip,timenow,times', " '','范德萨',NOW(),'5'")