php面向对象编程的三大特征
①封装 ②继承 ③多态
class Account {
public $blance;
public $no;
public function qun(){}
public function cun(){}
}
封装
那么在php中如何实现这种类似的控制呢?
请大家看一个小程序.(visit1.php),不能随便查看人的年龄,工资等隐私...
class Person{
public $name;
private $age;
private $salary;
function __construc($name,$age,$salary){
$this->name=$name;
$this->age=$age;
$this->salary=$salary
}
}
php提供了三种访问控制符号.
1.public 表示全局,可以在本类,类外部,子类 中使用
2.protected 表示受到保护, 可以在本类, 子类中使用
3.private 表示私有, 只能在本类使用
这三个控制修饰符号可以对 属性 和 方法修饰
1.如果一个方法没有访问修饰符,则默认是public
2.属性 必须指定访问修饰符
方法之间可以互相调用. 但是需要使用 $this引用
function test11(){
$this->test12();
}
protected function test12(){
echo "test12 hello";
}
$p1->test11();
//举例说明:
class Person{
public $name;
protected $age;
private $salary;
function __construct($name,$age,$salary){
$this->name=$name;
$this->age=$age;
$this->salary=$salary;
}
//成员方法
function showInfo(){
//这里说明在本类中可以使用 public protected 和private 修饰的变量.
echo $this->name."||".$this->age."||".$this->salary;
}
}
//创建一个人
$p1=new Person("孙悟空",30,1000);
echo $p1->name;//可以
echo $p1->age;//报错
echo $p1->salary;//报错.
我们现在就想去访问protected 变量或者 private 变量, 通常的做法是提供 public 函数去访问 这些变量. 形式是
public function setXxx($val){}
public function getXxx(){}
public function showInfo(){}
public protected private 可以修饰属性和方法
(1)查看 薪水 (private )
//获取这个人的薪水
public function getSalary($user,$pass){
if($user=="shunping" && $pass="123"){
return $this->salary;
}else{
return "sorry,你无法看";
}
}
(2)修改人的年龄
提供了两个函数.
//修改年龄,对输入的值,进行校验.
public function setAge($age){
if($age>1 && $age<120){
$this->age=$age;
}else {
echo "年龄范围不对";
}
}
//查看年龄
public function getAge(){
return $this->age;
}
//创建对象
$p1=new Person( "张三",22,1000);
//输出,查看
echo $p1->name .'<br/>' ;
//echo $p1->age;//报错
//echo $p1->salary;//报错
echo $p1->getSalary("李四" ,123);
echo '<br/>';
//修改年龄
$p1->setAge(133);
echo '<br/>';
echo $p1->getAge();
<?php
//创建一个名为Person的类
class Person{
//属性
//公共的访问控制修饰符
public $name;
//受保护的访问控制修饰符
protected $age;
//私有的的访问控制修饰符
private $salary;
//方法
//定义了构造方法
function __construct($iname,$iage,$isalary){
$this->age =$iage;
$this->name =$iname;
$this->salary =$isalary;
}
function showInfo(){
//这个方法说明了在本类中可以使用public,protected,private修饰的变量
echo $this->age .$this->name.$this-> salary;
}
//我们可以通过一个方法来访问protected和private变量
//获取这个人的薪水
public function getSalary($name,$pass){
if($name=="李四" && $pass=="123"){
return $this->salary ;
} else{
echo '对不起,您无法访问!';
}
}
//修改年龄,对输入的值进行校验
public function setAge($age){
if ($age>=0 && $age<=120){
return $this->age ;
}else{
echo'您的年龄不合法!';
}
}
//获取年龄
public function getAge(){
return $this->age ;
}
//方法之间的调用 用$this
function test1(){
$this->test2();
}
private function test2(){
echo 'test2 hello';
}
}
//创建对象
$p1=new Person( "张三",22,1000);
//输出,查看
echo $p1->name .'<br/>' ;
//echo $p1->age;//报错
//echo $p1->salary;//报错
echo $p1->getSalary("李四" ,123);
echo '<br/>';
//修改年龄
$p1->setAge(133);
echo '<br/>';
echo $p1->getAge();
echo '<br/>';
echo $p1->test1();
?>
还有一种形式, 通过 一对 __set 和 __get方法来操作我们的变量,不推荐.
class A{
private $n1;
private $n2;
private $n3;
//使用__set 方法来管理所有的属性
public function __set($pro_name,$pro_val){
$this->pro_name=$pro_val;
}
//使用__get 可以获取所有的属性值
public function __get($pro_name){
if(isset($pro_name)){
return $this->pro_name;
}else{
return null;
}
}
}
$a1=new A();
$a1->n1="hello";
echo $a1->n1;
$a1->n2=890;
echo "||".$a1->n2;
可以直接写一个方法了操作变量
class Peron{
protected $n1;
private $n2;
function showInfo($n1){
$this->n1=$n1;
echo $this->n1.”||”$this->n2;
}
}