今天学习了有关面向对象的内容:
传统的面向对象: 把将要完成的工作, 一个步骤一个步骤的实现, 最终完成目标
现代的面向对象: 把要做的事情提前存起来, 等到需要用的时候调用, 相当于设计方法和方法的调用
面向对象主要是设计思想上的极大提升面向过程是解决简单问题的自然的思维过程, 面向对象是解决大规模的复杂问题的良好思想
面向对象的基本概念:
类: 表示一个群体有共同特征, 某一类事物的总称
对象: 表示群体中的个体, 万事万物皆为对象
1 定义类:
定义类的语法中, 包括定义属性定义方法定义常量三种
2 创建类的对象:
3 使用对象:
- // 定义类
- class c1{
- var $name="匿名";
- var $sex="未知";
- var $age=18;
- function f1(){echo "函数 f1 被调用!";}
- const pi=3.14;
- }
- // 创建类的对象
- $person1=new c1();
- $person2=new c1();
- $person1->name="张三";
- $person1->sex="男";
- $str1=$person1->name;
- echo "{$str1} 的性别为:".$person1->sex."<br />";
- $person1->f1();
创建对象的基本形式:
$ 对象名 1=new 类名 ();
可变类名:
- $CName="C1";
- $person3=new $CName(); // 可变类 (名)
$ 对象名 3 = new self; //self 指代类本身, 这行代码只能在类内部方法中使用
通过对象创建对象
$person4=new $person3; // 通过对象创建该类的新对象
对象的传值:
php 中, 传值方式有值传递和引用传递
值传递: 拷贝数据本身传递结束, 有两份数据, 但两变量相互独立
引用传递: 传递结束, 数据只有一份, 两个变量同时指向该数据
面向对象: 默认值传递, 可以引用传递
- class p{
- var $v1=10;
- }
- $p1=new p();
- $p2=$p1->v1;
- $p1->v1=20;
- var_dump($p1);
- var_dump($p2);
输出结果为:$p1=20
- $p2=10
- class p{
- var $v1=10;
- }
- $p1=new p();
- $p2=$p1;// 传的是 v1, 不是 v1 的值
- $p1->v1=20;
- var_dump($p1);
- var_dump($p2);
输出结果为:$p1=20
- $p2=20
- class p{
- var $v1=10;
- }
- $p1=new p();
- $p2=&$p1->v1;
- $p1->v1=20;
- var_dump($p1);
- var_dump($p2);
输出结果为:$p1=20
$p2=20
面向对象的方法:
例:
- // 斜边
- class person{
- var $x=1;
- var $y=1;
- var $pi=1;
- function getxiebian($a,$b){
- $s1=$a*$a+$b*$b;
- $s2=pow($s1,0.5);
- return $s2;
- }
- }
- $p1=new person();
- $xie1=$p1->getxiebian(3,4);
- echo "<br /> 斜边 1=$xie1";
$this 关键字:
$this 是一个伪对象, 代表当前所属类的当前对象
- // 类与对象的创建 自我介绍
- class Person{
- public $name="匿名";
- public $age=28;
- public $PI=3.14;
- function intro(){
- echo"<b/>hi, 大家好, 我叫".$this->name;
- echo", 今年".$this->age."岁 < br/>";
- }
- }
- $p1=new Person();
- $p1->name="张三";
- $p1->age=20;
- $p1->intro();
- $p2=new Person();
- $p2->name="李四";
- $p2->age=22;
- $p2->intro();
一个系统函数:get_class(对象)
作用: 获得某个对象的所属类名结果只是一个类名字符串
$class_name = get_class($p1); // 结果是: Person
静态属性
定义: 只隶属于类本身也可以看做是所有对象的共有数据
使用:
- // 静态属性
- class C1{
- static $v1=10; // 静态属性
- }
- C1::$v1=100; // 修改静态属性的值
- $s1=C1::$v1; // 取得静态属性的值
- echo "s1=$s1";
- $c1=new C1();
- $c2=new c1();
- echo "<br/>c1 的中的静态属性 v1=".$c1::$v1;
- $c1::$v1=1000; // 通过 $c1 修改了静态属性值
- echo "<br/>c2 的中的静态属性 v1=".$c2::$v1;
静态方法
方法的前面加上 static 关键字修饰, 就变成了静态方法
静态方法同样隶属于类, 而不是隶属于具体对象使用方法跟静态属性类似:
类名:: 静态方法名 ();
静态方法是只隶属于类, 而为所有对象所共有
注意 1:$this 在静态方法中不能使用
self: 代表当前类
- class S2{
- public $v1=1;
- static function getNew(){
- return new self; //self 代表 "当前类"
- } //new self 代表当前类的一个对象
- }
- echo"<hr />";
- $obj2=S2::getNew(); //t 通过 S2 的静态方法得到该类的一个新对象
- var_dump($obj2);
构造方法和析构方法:
构造方法是创建对象的时候会自动调用
析构方法是销毁对象的时候会自动调用
- class student{
- public $name="匿名";
- public $sex="未知";
- static $age=18;
- const food="馒头";
- function intro(){
- echo"<b/>hi, 大家好, 我叫".$this->name;
- echo", 我是".$this->sex."生 < br/>";
- echo ", 我爱吃".self::food."<br>";
- }
- function __construct($n,$s){// 构造方法
- $this->name=$n;
- $this->sex=$s;
- }
- function __destruct(){// 析构方法
- echo"<br/> 被销毁了";
- }
- }
- echo"<hr/>";
- $student1=new student(刘能, 男);
- $student1->intro();
- $student2=new student(赵四, 男);
- $student2->intro();
- echo"<hr/>";
来源: http://www.bubuko.com/infodetail-2516772.html