php类与对象的基本概念

php面向对象设计

    对象相比数组的优点:不仅可以存储多个数据,还可以将函数存在对象中

    对象的三大特性:封装、继承、多态

    面向对象编程(object oriented programming 即oop),其达到了编程代码的重用性、灵活性和扩展性更加简洁、容易维护。php又不是纯的面向对象编程,其也可以是面向过程编程。

    1.面向对象和面向过程的区别?

      面向过程:就是在整个项目中最小单位都是由函数组成的

     面向对象:就是在整个项目中最小单位都是由对象组成的

   2.什么是对象

      对象,可以说世间万物都是。就是一个实体,在现实生活中能够描述出来的。例如:桌子、电脑等

   3.对象中有什么?

       对象:成员 

                 成员属性==变量-->定义对象的外观和状态

                 成员方法==函数-->定义对象的功能

   4.什么是类?

        分类、类型、自己类型

     就是给一个东西分类别,就是在这个类中定义属性和方法

     例如给鸟定义属性和方法

5、类与对象之间的一个关系

    声明类-->实例化对象(创建对象)-->用对象

    一句话就是:类是对象的声明,对象是类的实例

   类是抽象的,代表了一类的事物,现实生活中的具体事物

   类是对象的模板,对象是类的具体实例【就是生活中所能描述出来的一个具体的东西,人(一种食物的类别,即类,这里面的内容是每个人都通有的东西)-->黑人、白人、黄种人(具体的一个对象)】

  ①  类的声明

     修饰符  class 类名{

                    成员

            }

    案例:

        

<?php
//类的声明
class Cat{
public $name;
public $age;
public $color;
}

//实例化对象
$cat1=new Cat();//也可不用小括号()
$cat1->name="小白";//->是指向的意思
$cat1->age=2;
$cat1->color="白色";
$cat2=new Cat();
$cat2->name="小黑";
$cat2->age=2;
$cat2->color="黑色";

//对象的使用

$findName="小白";
if($cat1->name==$findName){
echo $cat1->name."<br/>".$cat1->age."<br/>".$cat1->color;


}
if($cat2->name==$findName){
echo $cat2->name."<br/>".$cat2->age."<br/>".$cat2->color;


}

?>

②如何定义一个类的文件名

      专门定义一个类的文件名应该这样定义:类名.class.php  

 例如:Cat.class.php

<?php

class Person{

public $name;
public $age;

}
$a=new Person();
$a->name="小明";
$a->age=20;
$b=$a;
var_dump($a);
echo "<br/>";
var_dump($b);
echo $a->name;
echo "<br/>".$b->name;

?>

图解

    内存的引申

代码

$a=78;
$b=&$a;//&引用的而是地址
$b=$b+8;//$b在内存中找到的是$a的地址,通过地址找到值然后再加8,所以$a的地址的值就变成了86
echo $a."||".$b;//结果为86||86

图解

 

 函数使用对象

class Person{

public $name;
public $age;

}
$a=new Person();
$a->name="小明";
$a->age=20;

function test2($b){//对象传递的是地址

$b->name="倪22";
}
function test($b){

$b->name="倪华";
test2($b);
}
test($a);

echo $a->name;//结果为倪22

  函数中传递的基本类型是什么?

其传递的是具体的值

$a=1;
$b=true;
$c="2fff";
function test3($a,$b,$c){//执行完之后就会释放栈,其并没有改变堆中的值,所以
$a=3;
$b=false;
$c="2frrf";
}

echo $a."||".$b."||".$c;//在外层echo的时候打印出的还是外层变量的值

要想改变值就要在变量前加个地址符号&

function test3(&$a,&$b,&$c){//引用变量的地址
$a=3;
$b=false;
$c="2frrf";
}

成员方法的理解:

      

class Person{

public $name;
public $age;
public function speak(){
echo "你好,世界!";

}
}
$a=new Person();
$a->name="小明";
$a->age=20;
$a->speak();//方法的调用,后必须加()

成员方法的细节问题:

 

在实际开发中使用类

       将一个对象放在另外一个文件中去调用

例如:

Person.class.php//这个文件中只用来定义的

       

<?php

class Person{

public $name;
public $age;
public function speak(){
echo "你好,世界!";

}
public function jisuan($n){
$res=0;
for($i=1;$i<=$n;$i++){

$res+=$i;

}
return $res;

}
public function max22($arr){//如果想在函数中改变外层传过来的数组中的元素值,就必须&$arr这样写(就是传的引用地址);否者就传的是值,在函数执行完了之后就释放栈
$arr[0]=100;
$maxValue=$arr[0];
$maxIndex=0;
for($i=0;$i<count($arr);$i++){
if($maxValue<$arr[$i]){
$maxValue=$arr[$i];
$maxIndex=$i;
}


}
return $maxValue;
}
}

?>

在test.php中使用

    test.php

<?php

require_once 'Person.class.php';

 //使用对象

$a=new Person();
$a->name="小明";
$a->age=20;
$a->speak();
$b=$a->jisuan(10);
$myarr=array(12,24,93);
$max33=$a->max22($myarr);
print_r($myarr);
echo "max=".$max33;

?>

posted on 2014-05-20 17:00  smile小红帽  阅读(716)  评论(0编辑  收藏  举报