面向对象编程OOP,
一切已对象为核心,关注的是项目中需要哪些对象,每个对象上能实现哪些功能;
概念:
类:拥有相同属性和相同行为对象的统称;如:学生,电脑,---学生属性(姓名,年龄,住址),只能知道有哪些属性,不知道具体的值;
对象:属性以及操作属性行为的集合体;可以知道具体的属性值,
面向过程
主要实现功能
声明类
1.定义类:
class 类名{
属性
方法
}
2.创建对象
$obj=new Rect();
class Rect{
//申明静态属性
var $width=0;
var $height=0;
//动态属性,行为即方法
function getLen(){
//$this 是指当前对象的属性,对象与属性连接方式:->,$this->width,获取当前对象的width属性
return ($this->width+$this->height)*2;
}
}
//创建对象
$rect1=new Rect();//创建具体的对象
$rect1->width=40;//设置该对象的具体属性
$rect1->height=40;
$len=$rect1->getLen();//调用对象上的方法,获取该对象的周长;
echo 'rect1的 长:'.$rect1->width.' 高:'.$rect1->height.' 周长:'.$len;
每个类都有__toString(){}将对象转换为字符串,,return 回去的是转换结果
将字符串转为数组:explode(分隔符,字符串)
将数组转为字符串 :join(连接符,数组)
构造方法
__construct([形参列表]){}
//构造方法--是在创建对象是自动调用该方法,主要用于初始化对象
析构方法
__destruct([形参列表]){}
//当对象销毁时自动执行,用于释放资源和垃圾对象(垃圾对象是一个对象没有相应的引用名称,或对象销毁时)
class Person{
var $name;
var $pwd;
var $telephone;
function __construct($name,$password,$tel){
//构造方法--是在创建对象是自动调用该方法,主要用于初始化对象
$this->name=$name;
$this->psw=$password;
$this->telephone=$tel;
$this->introduce();//创建后自动调用函数
}
function introduce(){
echo '我的账号:'.$this->name.'我的密码'.$this->psw;
}
function __destruct(){
echo '<br/>';
echo $this->name.'此变量已经销毁<hr/>';
}
}
$jack=new Person('jack','aaaa','123234');//jack我的密码aaaa
var_dump($jack);
//unset($jack);//手动销毁的话,立马执行;
$jam=new Person('jam','bbbb','2222');//jam我的密码bbbb
//没有手动销毁时,执行顺序是,先jam,后jack;先进后出原则;
创建一个点类(计算任意两点间的距离公式是:[A(x1,y1)、B(x2,y2)]
//计算这两点间的距离:((x1-x2)2+(y1-y2)2)开根) pow(x,y),sqrt(144)
class point{
var $x;
var $y;
function __construct($x,$y){
$this->x=$x;
$this->y=$y;
}
function dis($point){
return sqrt(pow($point->x-$this->x,2)+pow($point->y-$this->y,2));
}
}
$point2=new point(10,50);
$point1=new point(10,90);
echo $point1->dis($point2);//40
对象的特征->封装
将安全性高的信息隐藏起来;通过访问的控制符来实现
访问控制符:private ,protected,public 用于修饰方法及属性,主要控制他们的可见性,放在属性,方法之前
private :私有的,只有本类才能使用;
protected:受保护的,只有本类中子类才能使用;
public :公有的,本类,子类,类外部可以使用;
var 关键词只能修饰属性,不能修饰方法,同public;
魔术方法__set(),__get()__call(){}
- __set($name,$value)---当对象设置不存在的属性时或者没有权限的属性时自动调用此方法,需要两个形参分别用于接收属性名以及属性值
- __get($name)---当对象访问不存在的属性时或者没有权限的属性时自动调用此方法;
- __call($name,$arguments)**
- __call($name,$arguments)---当对象调用不存在的方法或者无权限访问的方法时自动调用该方法,$name---方法名,$arguments接收的是方法传递的参数,是数组**
- _callStaric($name,$arguments)当调用不存在的静态方法时调用**
property_exists(CLASS,$name) 检测某类中是定义指定属性;
class_exists(类名) 检测类是否存在
is_file(文件路径)检测文件是否存在
method_exists(类名|对象,方法名),判断方法名是否存在
_CLASS_获取当前类名
_METHOD_获取当前方法名//类,对象里面叫方法,外面是函数
_FUNCTION_获取当前函数名
trigger_error()
class Img{
private $src = '';
private $width;
private $height;
public function __construct($src,$w,$h){
$this->checkSrc($src);
$this->checkNum($w);
$this->checkNum($h);
$this->src = $src;
$this->width = $w;
$this->height = $h;
}
public function __set($name, $value){
if(property_exists(__CLASS__,$name)){
//只有定义了的属性才能设置
$fn = '';
if($name=='src'){
$fn = 'checkSrc';
}else if(array_search($name,['width','height'])!==false){
$fn = 'checkNum';
}
$this->$fn($value);
$this->$name = $value;
}
}
public function __get($name){
if(property_exists(__CLASS__,$name)){
return $this->$name;
}
}
private function checkSrc($path){
if(!is_file($path)){
trigger_error($path.'文件不存在!',E_USER_ERROR);
}
}
private function checkNum($num){
if(!is_int($num)){
trigger_error($num.'不是有效的整型!',E_USER_ERROR);
}
}
}
$img = new Img('upload/24.jpg',100,200);
$img->src = 'upload/20.jpg';
$img->width = 200;
echo $img->width.'<br />';
echo $img->src.'<br />';
echo $img->path.'<br />';
$img->height = 300;
var_dump($img);
class Shape{
// var $width; //var关键词只能修饰属性,相当于public,推荐使用public
// public $height;
// public $width;
// public $height;
//***要求width与height只能是整型,需要将此属性变成非公有的,避免在类外部随意设置值而不能相应的处理
private $width;
private $height;
public function __construct($w,$h){
// echo __CLASS__; //当前类名
$this->isInt($w);
$this->isInt($h);
$this->width = $w;
$this->height = $h;
}
public function setValue($key,$value){
//设置宽与高
if(property_exists(__CLASS__,$key)){
//property_exists(类名,属性名)----检测类是否定义了指定的属性名
$this->isInt($value);
$this->$key = $value;
}
}
public function getArea(){
return $this->width*$this->height;
}
public function justType(){
return $this->width==$this->height?'正方形':'长方形';
}
private function isInt($value){
if(!is_int($value)){
trigger_error($value.'不是整型,请重新传值',E_USER_ERROR); //trigger_error(msg)----触发一个错误信息
}
}
}
$s1 = new Shape(30,20);
echo $s1->getArea().'<br />';
$s1->setValue('width',50);
$s1->setValue('height',10);
echo $s1->getArea().'<br />';
网友评论