类与对象
类的成员:属性,方法,常量
(1)属性,常量 用来保存数据
(2)方法用来存放执行的代码
注意:在方法内部得到对象的属性,不能直接echo
Eg:class student{
public $name='zhangsan';//定义属性的时候一定要设置它的访问权限
public $age=23;
const PATH='D:/lamp/Apache2.2/htdocs';
public function test(){
//方法用来处理数据(保存的执行的代码)
//在类中通常使用$this代表实例化的对象不能直接echo属性
echo $this ->age;
echo '<hr/>';
echo student::PATH;
}
}
$student = new student();
echo $student ->name;
echo '<hr/>';
$student ->test();
访问控制:对属性和方法的访问控制是通过在前面添加关键字:
public,protected,private 来实现的
public 定义的类成员可以在任何地方被访问(类的内部和类的外部)
protected 定义的类成员可以被其所在类的子类和父类访问(当然在当前类内也可以访问)
private 定义的类成员只能被其所在类访问
eg:class student{
public $name='zhangsan';//定义属性的时候一定要设置它的访问权限
private $age='23';
protected $dender='male';
const PATH='D:/lamp/Apache2.2/htdocs';
public function test(){
//方法用来处理数据(保存的执行的代码)
//在类中通常使用$this代表实例化的对象不能直接echo属性
echo $this ->age;
echo '<hr/>';
echo student::PATH;
}
}
$student = new student();
//echo $student ->name;
echo '<hr/>';
$student ->test();
echo $student ->gender;
类常量:1,类常量的定义只能通过 const 常量名 = 常量值
const PATH = '';
eg:const PATH='D:/lamp/Apache2.2/htdocs'
2,获得常量:类名::常量名
Eg:echo student::PATH;
3,范围解析操作符 :: 用于访问静态属性,方法和常量
自动加载对象:
① 当我们需要一个类,但是没有此类时,会自动的__autoload()函数,这样脚本引擎在php出错前,有了最后一次机会加载所需的类
② 在调用这个函数时,会将当前所需的类名,以参数的形式传递到函数中去
Eg://类的自动加载
function __autoload($class_name){
//如果当前的类名是以helper_开头的就去helpers目录加载
//如果当前的类名是以page开头的,就加载page.class.php
if(substr($class_name,0,7)=='helper_'){
$file_name= substr($class_name,7);
require_once('helper/'.$class_name.'.class.php');
}elseif(substr($class_name,0,4)=='page'){
$file_name= substr($class_name,4);
require_once('helper/'.$file_name.'.class.php');
}
}
$page= new page();
魔术方法:
属于类的常用的魔术方法:
__construct()
构造函数 ------拥有构造方法的类,会在实例化对象的时候,先调用这个方法,适合于在实例化对象之前做一些初始化操作
__desctruct()
析构函数,对象注销的时候自动的调用析构函数,通常在对象注销的时候释放数据库链接
__autoload() 当我们实例化一个类,但是没有找到这个类的定义,会自动的调用__autoload()这个魔术方法,提供了一个契机,在php报错之前还有最后一次机会 加载这个类
(2)在调用这个魔术方法的时候,会自动的将需要的类名以参数的形式传递到了函数中去
__toString()
当我们echo 对象的时候,会报错,这个时候__autoload()提供了一个契机,在报错之前 获得一个字符串
构造函数析构函数:
1,构造函数()
构造方法,实例化一个类的对象时,会自动的先调用这个方法
2,析构函数(PHP对象被销毁前执行)
析构函数,php的对象被销毁时(脚本执行完毕)调用这个函数
3,如果在实例化一个类的对象时传递参数,意味着向类的构造函数传递参数
Eg: <?php
class db{
private $host;
private $user;
private $pass;
private $db_name;
private $link;
public function __construct($host,$user,$pass,$db_name){
//构造函数会在实例化对象的时候先调用这个方法提供了一个契机:初始化属性
//如果实例化一个类的对象的时候传递了参数意味着向这个构造函数里面传递参数
$this->host=$host;
$this->user=$user;
$this->pass=$pass;
$this->db_name=$db_name;
$this->connect();
}
public function connect(){
//如果连接数据库成功返回一个标识,这个标识用来以后断开数据库的标识
$this->link=mysql_connect($this->host,$this->user,$this->pass,$th is->db_name);
mysql_query();
}
public function __destruct(){
//析构函数在对象注销的时候自动调用 提供一个契机代码执行完毕断开数据库连接
mysql_close($this->link);
}
}
$db=new db('localhost','root','123','ecshop');
?>
克隆:1,对象之间赋值是引用传递
PHP有两种方法获得新对象
(1) 通过类实例化对象
(2)clone(获得的是不同的对象)
Eg: //1.对象的赋值 采用的是引用传递
//2.php获得对象呦两种方法(1)通过类实例化一个对象(2)通过克隆
require_once ('page.class.php');
$page = new page();
//引用传递获得的是同一个对象
//获得不同的对象通过克隆
$page3=clone $page;
$page2=$page;
var_dump($page==$page2);//bool(true)引用传递获得同一个对象
var_dump($page===$page3);//bool(false)) 通过clone获得对象不是同一个
var_dump($page,$page2,$page3);
面向对象3大特性
1,封装型:封装就是将自然实体(特征)采用计算机面向对象的语言去描述,将自然语言抽象成计算机语言的过程
2,继承性:有必要将相同的代码提取出来,然后在需要的地方载入,通过类的继承来实现
3,多态性:多态是面向对象的一种特性,但是在php这种弱类型的语言中,体现的不是很明显[多态,就是同一个对象的多种状态,同样是求面积,长方形和正方形的方法不同,这就是多态]
静态属性:
1,面向对象的编程中,我们可以通过对象访问方法和属性,还可以通过类来访问它的成员,这样的方法和属性就是静态的
2,定义类的静态属性,需要增加static关键字
3,静态属性可以在静态方法中访问,也可以在非静态方法中访问
4,类的每个实例都可以访问类中定义的静态属性
Eg:<?php
//在面向对象的编程中 我们可以通过对象($this)来访问类的属性和方法
//我们还可以通过类来访问它的成员(属性方法常量)前提是这些属性和方法必须是静态的
class test{
//如何定义类的成员是静态的 通过在成员前面增加关键字 static
//通过静态属性和方法统计一下当前这个类实例化了多少个对象
private static $count=0;
public function __construct(){
//test::$count++; //静态的属性属于类的 不能通过对象来访问
//在类中 我们可以通过类来访问静态的属性 也可以通过关键字self代替当前的类名
self::$count++;//范围解析操作符表示的是范围那个类的属性(方法)
}
//静态属性可以在静态方法中访问到也可以在飞静态方法中访问到
public static function getCount(){
return self::$count;
}
}
$tets=new test();
$tets2=new test();
$tets3=new test();
$count=$tets->getCount();
echo $count;
?>
设计模式:
工厂模式:之所以是工厂模式,就是因为他只负责生产对象
用的最多的地方就是根据条件动态的创建对象
单例模式:我们操作数据库的对象,只需要一个(连接一次就够了),当一个类,使用一次就能够完成功能的话,我们需要保证实例化一次对象就够了
类与对象
类的成员:属性,方法,常量
(1)属性,常量 用来保存数据
(2)方法用来存放执行的代码
注意:在方法内部得到对象的属性,不能直接echo
Eg:class student{
public $name='zhangsan';//定义属性的时候一定要设置它的访问权限
public $age=23;
const PATH='D:/lamp/Apache2.2/htdocs';
public function test(){
//方法用来处理数据(保存的执行的代码)
//在类中通常使用$this代表实例化的对象不能直接echo属性
echo $this ->age;
echo '<hr/>';
echo student::PATH;
}
}
$student = new student();
echo $student ->name;
echo '<hr/>';
$student ->test();
访问控制:对属性和方法的访问控制是通过在前面添加关键字:
public,protected,private 来实现的
public 定义的类成员可以在任何地方被访问(类的内部和类的外部)
protected 定义的类成员可以被其所在类的子类和父类访问(当然在当前类内也可以访问)
private 定义的类成员只能被其所在类访问
eg:class student{
public $name='zhangsan';//定义属性的时候一定要设置它的访问权限
private $age='23';
protected $dender='male';
const PATH='D:/lamp/Apache2.2/htdocs';
public function test(){
//方法用来处理数据(保存的执行的代码)
//在类中通常使用$this代表实例化的对象不能直接echo属性
echo $this ->age;
echo '<hr/>';
echo student::PATH;
}
}
$student = new student();
//echo $student ->name;
echo '<hr/>';
$student ->test();
echo $student ->gender;
类常量:1,类常量的定义只能通过 const 常量名 = 常量值
const PATH = '';
eg:const PATH='D:/lamp/Apache2.2/htdocs'
2,获得常量:类名::常量名
Eg:echo student::PATH;
3,范围解析操作符 :: 用于访问静态属性,方法和常量
自动加载对象:
① 当我们需要一个类,但是没有此类时,会自动的__autoload()函数,这样脚本引擎在php出错前,有了最后一次机会加载所需的类
② 在调用这个函数时,会将当前所需的类名,以参数的形式传递到函数中去
Eg://类的自动加载
function __autoload($class_name){
//如果当前的类名是以helper_开头的就去helpers目录加载
//如果当前的类名是以page开头的,就加载page.class.php
if(substr($class_name,0,7)=='helper_'){
$file_name= substr($class_name,7);
require_once('helper/'.$class_name.'.class.php');
}elseif(substr($class_name,0,4)=='page'){
$file_name= substr($class_name,4);
require_once('helper/'.$file_name.'.class.php');
}
}
$page= new page();
魔术方法:
属于类的常用的魔术方法:
__construct()
构造函数 ------拥有构造方法的类,会在实例化对象的时候,先调用这个方法,适合于在实例化对象之前做一些初始化操作
__desctruct()
析构函数,对象注销的时候自动的调用析构函数,通常在对象注销的时候释放数据库链接
__autoload() 当我们实例化一个类,但是没有找到这个类的定义,会自动的调用__autoload()这个魔术方法,提供了一个契机,在php报错之前还有最后一次机会 加载这个类
(2)在调用这个魔术方法的时候,会自动的将需要的类名以参数的形式传递到了函数中去
__toString()
当我们echo 对象的时候,会报错,这个时候__autoload()提供了一个契机,在报错之前 获得一个字符串
构造函数析构函数:
1,构造函数()
构造方法,实例化一个类的对象时,会自动的先调用这个方法
2,析构函数(PHP对象被销毁前执行)
析构函数,php的对象被销毁时(脚本执行完毕)调用这个函数
3,如果在实例化一个类的对象时传递参数,意味着向类的构造函数传递参数
Eg: <?php
class db{
private $host;
private $user;
private $pass;
private $db_name;
private $link;
public function __construct($host,$user,$pass,$db_name){
//构造函数会在实例化对象的时候先调用这个方法提供了一个契机:初始化属性
//如果实例化一个类的对象的时候传递了参数意味着向这个构造函数里面传递参数
$this->host=$host;
$this->user=$user;
$this->pass=$pass;
$this->db_name=$db_name;
$this->connect();
}
public function connect(){
//如果连接数据库成功返回一个标识,这个标识用来以后断开数据库的标识
$this->link=mysql_connect($this->host,$this->user,$this->pass,$th is->db_name);
mysql_query();
}
public function __destruct(){
//析构函数在对象注销的时候自动调用 提供一个契机代码执行完毕断开数据库连接
mysql_close($this->link);
}
}
$db=new db('localhost','root','123','ecshop');
?>
克隆:1,对象之间赋值是引用传递
PHP有两种方法获得新对象
(1) 通过类实例化对象
(2)clone(获得的是不同的对象)
Eg: //1.对象的赋值 采用的是引用传递
//2.php获得对象呦两种方法(1)通过类实例化一个对象(2)通过克隆
require_once ('page.class.php');
$page = new page();
//引用传递获得的是同一个对象
//获得不同的对象通过克隆
$page3=clone $page;
$page2=$page;
var_dump($page==$page2);//bool(true)引用传递获得同一个对象
var_dump($page===$page3);//bool(false)) 通过clone获得对象不是同一个
var_dump($page,$page2,$page3);
面向对象3大特性
1,封装型:封装就是将自然实体(特征)采用计算机面向对象的语言去描述,将自然语言抽象成计算机语言的过程
2,继承性:有必要将相同的代码提取出来,然后在需要的地方载入,通过类的继承来实现
3,多态性:多态是面向对象的一种特性,但是在php这种弱类型的语言中,体现的不是很明显[多态,就是同一个对象的多种状态,同样是求面积,长方形和正方形的方法不同,这就是多态]
静态属性:
1,面向对象的编程中,我们可以通过对象访问方法和属性,还可以通过类来访问它的成员,这样的方法和属性就是静态的
2,定义类的静态属性,需要增加static关键字
3,静态属性可以在静态方法中访问,也可以在非静态方法中访问
4,类的每个实例都可以访问类中定义的静态属性
Eg:<?php
//在面向对象的编程中 我们可以通过对象($this)来访问类的属性和方法
//我们还可以通过类来访问它的成员(属性方法常量)前提是这些属性和方法必须是静态的
class test{
//如何定义类的成员是静态的 通过在成员前面增加关键字 static
//通过静态属性和方法统计一下当前这个类实例化了多少个对象
private static $count=0;
public function __construct(){
//test::$count++; //静态的属性属于类的 不能通过对象来访问
//在类中 我们可以通过类来访问静态的属性 也可以通过关键字self代替当前的类名
self::$count++;//范围解析操作符表示的是范围那个类的属性(方法)
}
//静态属性可以在静态方法中访问到也可以在飞静态方法中访问到
public static function getCount(){
return self::$count;
}
}
$tets=new test();
$tets2=new test();
$tets3=new test();
$count=$tets->getCount();
echo $count;
?>
设计模式:
工厂模式:之所以是工厂模式,就是因为他只负责生产对象
用的最多的地方就是根据条件动态的创建对象
单例模式:我们操作数据库的对象,只需要一个(连接一次就够了),当一个类,使用一次就能够完成功能的话,我们需要保证实例化一次对象就够了