php面向对象编程
u 成员属性的说明
1. 成员属性是从某个事物提取出的,它可以是 基本数据类型(整数、小数、字符、布尔),也可以是复合数据类型(数组、对象)
<?php
class Cat{
public $name;
public $age;
}
//创建对象
$cat1=new Cat;
$cat1=new Cat();
?>
2. 怎样访问一个成员属性(其它成员属性是public)
基本语法是
$对象名->属性名;
? 如果一个文件,专门用于定义类,则命名规范应当这样
类名.class.php
//定义一个人类
class Person{
public $name;
public $age;
}
$a=new Person();
$a->name="小明";
$a->age=20;
//把a变量(对象),赋给$b
$b=$a;
echo $a->name."<br/>";
echo $b->name."<br/>";
再次说明:
$a=78;
//$b=$a;
$b=&$a;
$b=$b+8;
echo $a."||".$b;
u 如果给一个函数传递一个对象,实际上是传递的一个地址.
//看下面的一段代码:
class Person{
public $name;
public $age;
}
$p1=new Person();
$p1->name="韩顺平";
$p1->age=33;
//函数接收对象时候,究竟是传入值,还是地址(!!!!)
function test1($p){
$p->name="小明";
}
test1($p1);
echo $p1->name;
分析图
u 如果给函数传递的是基本数据类型( 整数、小数、布尔、字符) ,究竟传递的是什么?
结论 : 在默认的情况下是传递的值, 如果你希望传入地址
function test(&$变量....){
}
在php中如果,给一个函数传递的是数组,则默认情况下是传值(拷贝了新的数组),如果希望传入地址,则应当,&$数组名
学生问题?
<?php $a1=array(1,3,900);$a2=array(56,90,100); $arr=array($a1,$a2); foreach($arr as $k=>$v){ echo “$k=$v”;} ?>
u 成员方法的讲解
函数和成员方法关系:
当我们把一个函数写到 某个类中,则该函数可以称成员方法:
我们有这样一个需求; 希望人可以说话, 做算术题.......,这样就需要使用到成员方法:
①添加speak 成员方法,输出 我是一个好人
②添加jisuan 成员方法,可以计算从 1+..+1000的结果
③修改jisuan 成员方法,该方法可以接收一个数n,计算 1+..+n 的结果
④添加add 成员方法,可以计算两个数的和
成员方法的基本语法:
访问修饰符号 function 函数名(参数列表){
//函数体
//return 语句;
}
<?php class Person{ public $name; public $age; public function speak(){ echo "我是一个好人!"; } public function count1(){ $res=0; for($i=1;$i<=1000;$i++){ $res+=$i; } //return 究竟到什么地方去?谁调用,就返回给谁 return $res; } //修改jisuan 成员方法,该方法可以接收一个数n,计算 1+..+n 的结果 public function count2($n){ $res=0; for($i=0;$i<=$n;$i++){ $res+=$i; } return $res; } //添加add 成员方法,可以计算两个数的和 public function add($num1,$num2){ return $num1+$num2; } }
//如何使用函数
//1. 创建一个人
$p1=new Person();
//通过对象去访问,调用成员方法.
//这里强调,调用成员方法和调用普通函数的机制,仍然不变
$p1->speak();
//让这个人做算术题
$res=$p1->count1();
echo ‘计算结果是=‘.$res;
//让这个人可以接收一个数,然后计算
echo "计算结果是=".$p1->count2(100);
echo "计算结果是=".$p1->count2(100);
echo "计算结果是=".$p1->count2(100);
echo "23+89=".$p1->add(23,89);
?>
u 成员方法的细节
我们在实际开发,其实通常是这样来使用类
Person.class.php
<?php
class Person{
//成员属性
public $name;
public $age;
//成员方法
public function speak(){
echo "我是一个好人!";
}
public function count1(){
$res=0;
for($i=1;$i<=1000;$i++){
$res+=$i;
}
//return 究竟到什么地方去?谁调用,就返回给谁
return $res;
}
//修改jisuan 成员方法,该方法可以接收一个数n,计算 1+..+n 的结果
public function count2($n){
$res=0;
for($i=0;$i<=$n;$i++){
$res+=$i;
}
return $res;
}
//添加add 成员方法,可以计算两个数的和
public function add($num1,$num2){
return $num1+$num2;
}
//添加一个新的方法,可以判断三个数最大的数
public function findMax($arr){
//这里仍然可以写算法
//从$arr数组中,找到最大的数.
//1.假设数组的第一个数就是最大的数
$maxVal=$arr[0];
//2.最大数的下标是
$maxIndex=0;
//开始循环的比较
for($i=1;$i<count($arr);$i++){
//这个条件说明,maxVal不是最大
if($maxVal<$arr[$i]){
//调整
$maxVal=$arr[$i];
$maxIndex=$i;
}
}
return $maxVal;
}
}
?>
Exercise01.php
<?php
//引入类文件
require_once ‘Person.class.php’;
//创建对象
$p1=new Person();
//调用$p1的各个方法
$p1->speack();
$p1->count1();..
?>
?
案例:
编写一个函数(以面向对象的方式开发),从网页输入一个整数打印出对应的金子塔:
当我们学习完成员方法后,我们的类定义就完善一步了:
1.设计计算机类,要求如下:
属性:品牌,颜色,cpu型号,内存容量,硬盘大小,价格,工作状态
方法: 打开,关闭,休眠 (表示)
创建一个计算机对象,调用打开,关闭方法.
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。