封装(面向对象特性之一)

实验  1

class  Ren        ----定义一个类

{

  private $name;     ----私有的成员

}

$r = new Ren();      ----造一个人

$r->name;    ----外部调用 name  输出报错(private特性)

实验  2

class Ren    ----定义一个类

{

  private $name;  ----私有成员

  function  setName($n)    ----在类内 做一个方法

  {

    $this->name = $n;  ----调用参数

  }

}

$r = new Ren();    ----造一个人

$r->setName("张三");  ----设置name值 为"张三"

var_dump($r);      ----输出成功

可以通过在类内设置方法间接访问 private

实验  3

class Ren    ----定义一个类

{

  private $name;  ----私有成员

  function  setName($n)    ----在类内 做一个方法

  {

    $this->name = $n;  ----调用参数

  }

  function getName()    ----获取name值

  {

    return $this->name;  ----返回name的值

  }

}

$r = new Ren();    ----造一个人

$r->setName("张三");  ----设置name值 为"张三"

echo $r->getName();

输出结果为  张三

实验  4

class Ren    ----定义一个类

{

  private $age;  ----私有成员   假设age 18-50之间

  function  setAge($n)    ----在类内做一个方法,一般情况下为public公共属性,都可调用,随意                 更改,不可控

                 通过加逻辑语句控制类 使类更安全

                 

  {

    if($n>=18  &&  $n<=50)          **添加的逻辑语句

    {

    $this->Age = $n;  ----调用参数

    }

  }

  function getAge()    ----获取值

  {

    return $this->age;  ----返回age的值

  }

}

封装总结:

目的:为了使类更加安全

做法:

1、将成员变量变为私有  (实验2)

2、做一个成员方法来间接访问 (实验3)

3、在该方法里面加限制条件(实验4)

封装的基本方法:

function  setAge($n)    

  {

    if($n>=18  &&  $n<=50)          **添加的逻辑语句

    {

    $this->Age = $n;  ----调用参数

    }

  }

  function getAge()    ----获取值

  {

    return $this->age;  ----返回age的值

  }

类似与面向过程,针对性强。若面向对象数少时为不二选择,若面向对象数大时,代码量至少会翻倍(一个对象,写两个方法;两个,写四个;三个,写六个……)

魔术方法:给变量赋值

按常规方法

例:

function __set($n,$v)    ---拉取两个值 $n函数名,$v函数值

{

  if($n=="age")      ---如果$n是age

  {

    if($v>=18  &&  $v<=50)   ---如果$n的值$v 满足条件

    {

      $this->$n = $v;    ---调用这个函数$n , $n的值是$v

    }

  }

  else                ---其他的

  {

    $this->$n = $v;        ---直接赋值

  }

}

function __get($n)    ---直接写函数名

{

  return $this->$n;    ---返回函数值

}

总结:

魔术方法更适合封装。只需要拉取两个变量(函数名,函数值)按常规方式设置、返回 加约束条件即可。

魔术方法可无限次使用

时间: 2024-12-31 14:09:00

封装(面向对象特性之一)的相关文章

Javascript面向对象特性实现封装、继承、接口详细案例——进级高手篇

Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript时,可以选择面向过程的方式编程,显得高效:但在实际工作中,遇到的项目需求和框架较大的情况下,选择面向对象的方式编程显得尤其重要,Javascript原生语法中没有提供表述面向对象语言特性的关键字和语法(如extends.implement).为了实现这些面向对象的特性,需要额外编写一些代码,如下.

如何在Javascript中利用封装这个特性

对于熟悉C#和Java的兄弟们,面向对象的三大思想(封装,继承,多态)肯定是了解的,那么如何在Javascript中利用封装这个特性呢? 我们会把现实中的一些事物抽象成一个Class并且把事物的属性(名词)作为Class的Property把事物的动作(动词)作为Class的methods.在面向对象的语言中(C#等)都会有一些关键字来修饰类或者属性(Private,public,protect),这些关键词描述了访问的权限,不多做解释.泗阳县民用航空局 我们来看看Javascript的易变的特性

Java语言中的面向对象特性

1.1 面向对象的基本概念  面向对象的基本思想  面向对象是一种新兴的程序设计方法,或者是一种新的程序设计规范(paradigm),其基本思想是使用对象.类.继承.封装.消息等基本概念来进行程序设计.从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式.开发一个软件是为了解决某些问题,这些问题所涉及的业务范围称作该软件的问题域.其应用领域不仅仅是软件,还有计算机体系结构和人工智能等. 1. 对象的基本概念  对象是系统中用来描述客观事物的一个实体

PHP中面向对象特性实现

PHP近些年来成为全球最流行的网页编程语言,该语言以弱类型.易兼容.门槛低.开发快.功能强著称,且听别人这么说,我在有了c和c#基础后学习PHP过程中也并不是很顺利,该语言的一些特殊的语法规则又是让我混淆,不过不得不说,它让编程变得更加容易了.大家可能学习过C++或C#,应该知道面向对象的三大特征:封装性.继承性.多态性.其实任何一门编程语言,除了语言特有的API不同外,语言本身的编程思想和理念是想通的.现在,就让我带你走进PHP中面向对象特性的实现方式. 首先必须明白PHP为面向对象设定的6个

Java语言中的面向对象特性总结

[课前思考]  1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类?  2. 面向对象编程的特性有哪三个?它们各自又有哪些特性?  3. 你知道java语言在面向对象编程方面有何独特的特点吗? 难点:  1. 理解方法重载和方法重写,不要混淆了两者的使用.  2. 类变量和类方法的使用.  3. 接口的使用. 3.1 面向对象技术基础 http://hovertree.com/menu/java/ 3.1.1 面向对象的基本概念  面向对象的基本思想  面向对象是一种新兴的程序设计方

面向对象特性一

面向对象特性 封装 定义:隐藏对象得属性和实现细节, 仅仅对外提供公共访问得方法 好处: 将变化隔离, 便于使用: 提高重用性,安全性. 原则:将不需要对外提供得内容隐藏起来, 把属性隐藏起来,提供公用得方法对其访问. this: 式对象得引用代表对象.作用是减少命名得冲突. static:是静态修饰符,是静态关键字. 特点: 通过它实现对象之间数据得共享 可以通过类名直接调用 静态随着类加载而加载, 它优于对象存在 注意点: 某个对象需要特别持有得数据是不能够被静态修饰否则, 共享 因为静态方

TypeScript -- 面向对象特性

面向对象特性 一.类(class)--TypeScript的核心,使用TypeScript开发时,在部分代码都是写在类里面的. 1.class关键字和类名就可以定义一个类 . 类的访问控制符--有三个,public,private,protected class Person { public name;//public(公有的)访问控制符,其为默认的private eat() {//private为私有的访问打控制符console.log('im eating'); } protected a

C++对C语言的非面向对象特性扩充(3)

今天要讲的是C++作用域运算符"::",强制类型转换的扩充,C++中相对于C中malloc和free函数的运算符new和delete,以及C++对C的一个重要扩充:引用(reference):这也是C++对C语言的非面向对象特性扩充系列的最后一节. 1.如果有两个同名变量,一个是全局的,一个是局部的,那么局部的变量在其作用域拥有较高的优先权,全局变量则被屏蔽.那如果我希望在局部变量的作用域里使用全局变量怎么办,这时就要用到::作用域运算符了.比如: 1 #include<iost

javascript 的面向对象特性参考

最近在看用javascript+css实现rich client.javascript 也是一个蛮有意思的语言.特别是其面向对象的实现和其他“标准”的OO launguage有很大的不同.但是,都是动态语言,我还是觉得它比起python语法和库都差得太远.可是没有explorer支持python开发 啊...:( 这是我学习javascript中面向对象特性的一点总结.希望对具有其他语言的面向对象设计经验的朋友理解javascript的OO有所帮助.我具有c++,java和python的面向对象