设为首页 加入收藏

TOP

PHP面向对象的小总结(一)
2019-08-23 00:33:08 】 浏览:58
Tags:PHP 面向 对象 总结

 面向对象特性:

*重用性 (每个模块都可以在项目中重复使用)

*灵活性 (每个模块都很轻松被替换更改的)

*拓展性(在模块上添加新功能是很方便的)

类和对象的关系(类生成对象)

物以类聚:相同特性的对象归为一个类,比如nba球员,都有想到的属性姓名,身高体重,球队号码,方法有跑步,跳跃,运球,投篮。将他们当做一个类,而乔丹,詹姆斯这些就是nba球员的实例,也叫对象;

对象内部高内聚(特定的职能,所有相关的内容都封装在对象内部),对外低耦合(对象的一些可见属性和一些可见方法)

用class 声明一个类,在类里面只能有 成员属性 和 成员方法!!!!不能有其他,在一个脚本中不能有两个同名类,实例化类可以有多个对象

class Computer{
    public $text = "用关键字new实例化一个类";
    public function output(){
    echo $this->text;
    }
}
$computer = new Computer();

$computer->output();//外部访问方法
$computer->text();//外部访问属性
$computer2 = new Computer();//可以实例化多个

 类的属性和方法

访问控制:
public 公有 都可以访问
private 私有  只有类本身内部可以访问
protected  受保护 继承的子类和类本身内部可以访问,外部访问不了,如: $computer->output();如果output()方法设了protected,则报错。


类里面的方法:

方法里面调用一个属性,需要实例化类才能访问属性,而$this可以理解为是这个类的一个实例

class Computer{
    public $text = "用$this调用我";
    public function output(){
    echo $this->text;
    }
}

 

构造方法(实例化时执行)

 构造方法可以传递参数,在实例化时传入

 通过构造函数的参数传递,改变里面的属性使得每个实例对象不同

class Computer{
   function __construct($arg){
       echo "我是构造方法,自动执行";
    
echo $arg;
} } 

$conputer = new Computer("我是构方法的参数");

 析构方法:销毁时执行,不能有参数

程序结束后自动执行,手动释放(当对象的引用全部销毁时)会使析构函数提前执行,不用等到程序结束后才调用

当你 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了 

 

//对象引用  在PHP 中引用的意思是:不同的名字访问同一个变量内容.
class A
{
    
    function __destruct()
    {
        echo '====我是析构函数====';
    }
}


$a = new A();
//提前执行析构函数的两个方法 unset($a);$a=null;
echo "====正常执行我是先输出的=====";
//两种对象引种的区别
$a = $b;//这时$a和$b是两个独立的引用,unset($aa)只是删除了$a的引用,还有$b的引用,所以不会执行析构函数。改变其中一个为null,不会影响另外一个变量,也不会执行析构函数;
$c = &$a;//两个的变量使用同个引用,c是a的影子,改变其中一个变量为null,两个都为null,会执行析构函数。但是只是unset($a),$c还在使用引用,只要有引用在不会执行析构函数;
//对象的引用用于访问对象的属性和方法,所以$a $b $c都可以访问对象的属性方法; //当一个对象的所有引用被删除后,才会触发析构函数 //总结:如果程序大,对象引用尽量使用&,节省内存,清除也方便。设其中一个为Null,其他都为Null; //变量引用 (默认变量赋值会独立开辟一个内存存放内容) //PHP 的引用允许你用两个变量来指向同一个内容
$a="AB"; $b =&$a; echo $a;//这里输出:AB echo $b;//这里输出:AB $b="EF"; echo $a;//这里$a的值变为EF 所以输出EF echo $b;//这里输出EF
<?php
$a  = 1;
$b  $a ;
echo  $a ;
//在此之前,b都是和a共用内存空间的。
xdebug_debug_zval( 'b' );
$a  = 2; //a作出了改变,此时b才会有自己的空间
xdebug_debug_zval( 'b' );
?>


//函数引用
<?php
function test(&$a){ 
$a=$a+100; 
} 
$b=1; 
echo $b;//输出1 test($b); //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值 就可以改变$b的值了 echo "<br>"; echo $b;//输出101
?>
//函数的引用返回

<?php
function &test(){
static $b=0;//申明一个静态变量
$b=$b+1;
echo $b;
return $b; 
}
$a=test();//这条语句会输出 $b的值 为1 相当于$a=$b
$a=5; $a=test();//这条语句会输出 $b的值 为2 也是$a=$b
$a=&test();//这条语句会输出 $b的值 为3 $a=&$b,所以b会随a变了
$a=5; $a=test();//这条语句会输出 $b的值 为6
?>

赋值和克隆的区别

$a=$b(独立引用)和$a=&$b(同一引用)这种赋值方式,指向的是同一个对象,同一块内存空间;

$a=clone $b这种赋值方式,则是指向另一个新的对象,另一个块新的内存空间。

<?php

class mm {

    public $name = 'Peter';

}

$a = new mm();

$b = $a$c = &$a;

$d = clone $a$b->name = "Anne";

echo $a->name,"\n",$b->name,"\n",$c->name,"\n",$d->name;//输出为:Anne Anne Anne Peter

?>

 

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇php三种无限分类 下一篇php 中使用cURL发送get/post请求..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目