PHP面向对象程序设计类的定义与用法简单示例


Posted in PHP onDecember 27, 2016

本文实例讲述了PHP面向对象程序设计类的定义与用法。分享给大家供大家参考,具体如下:

<?php
class Person {
  private $name;
  private $sex;
  private $age;
  function __construct($name = "", $sex = "男", $age = 22) {
    $this->name = $name;
    $this->sex = $sex;
    $this->age = $age;
  }
  // 直接为私有属性赋值时自动调用,可以屏蔽一些非法赋值
  // 之前有版本可以设置方法为private function __set()
  // The magic method __set() must have public visibility
  // 因为5.35对魔术方法限制的严格了
  public function __set($propertyName, $propertyValue) {
    if ($propertyName == "sex") {
      if (! ($propertyValue == "男" || $propertyValue == "女")) {
        return;
      }
      if ($propertyValue > 150 || $propertyValue < 0) {
        return;
      }
    }
    // 根据传入的成员属性名,赋上相应的值
    $this->$propertyName = $propertyValue;
  }
  // 用来获取私有属性
  public function __get($propertyName) {
    if (isset ( $this->$propertyName )) {
      return ($this->$propertyName);
    } else {
      return (NULL);
    }
  }
  public function __isset($propertyName) {
    if ($propertyName == "name") {
      return false; // 返回假,不允许在对象外部测定这个属性
    }
    return isset ( $this->$propertyName );
  }
  public function __unset($propertyName) {
    if($propertyName=="name") {
      return; //不允许删除name属性
    }
    unset($this->$propertyName);
  }
  function say() {
    echo $this->name . "在说话<br/>";
  }
  function run() {
    echo "在走路·<br/>";
  }
  function __destruct() {
    echo "goodbye" . $this->name . "<br/>";
  }
}
$person1 = new Person ();
$person2 = new Person ( "2" );
$person3 = new Person ( "3" );
// 自动调用了__set()
$person1->name = "张三";
echo $person1->name;
echo "<br/>";
echo $person1->say ();
// 自动调用了__get()
echo $person1->age;
echo "<br/>";
var_dump ( isset ( $person1->name ) );
echo "<br/>";
unset($person1->name);
echo "unset------------>".$person1->name;//name 没有被unset()
echo "<br/>";
$person2 = null;
?>

结果:

张三
张三在说话
22
bool(false)
unset------------>张三
goodbye2
goodbye3
goodbye张三

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
基于mysql的论坛(7)
Oct 09 PHP
用PHP动态生成虚拟现实VRML网页
Oct 09 PHP
ThinkPHP的URL重写问题
Jun 22 PHP
php中动态调用函数的方法
Mar 16 PHP
详解PHP的Yii框架中自带的前端资源包的使用
Mar 31 PHP
php curl 模拟登录并获取数据实例详解
Dec 22 PHP
Yii2配置Nginx伪静态的方法
May 05 PHP
PHP实现八皇后算法
May 06 PHP
PHP实现一个按钮点击上传多个图片操作示例
Jan 23 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
Feb 27 PHP
PHP实现随机发扑克牌
Apr 22 PHP
PHP如何通过date() 函数格式化显示时间
Nov 13 PHP
PHP面向对象程序设计OOP继承用法入门示例
Dec 27 #PHP
记录一次排查PHP脚本执行卡住的问题
Dec 27 #PHP
PHP串行化与反串行化实例分析
Dec 27 #PHP
PHP 表单提交及处理表单数据详解及实例
Dec 27 #PHP
iOS+PHP注册登录系统 PHP部分(上)
Dec 26 #PHP
PHP实现表单提交时去除斜杠的方法
Dec 26 #PHP
PHP简单实现冒泡排序的方法
Dec 26 #PHP
You might like
PHP中数据类型转换的三种方式
2015/04/02 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
2015/08/31 PHP
php使用curl详细解析及问题汇总
2016/08/11 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
2019/05/27 PHP
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
2020/12/30 PHP
巧妙破除网页右键禁用的十大绝招
2006/08/12 Javascript
javascript实现 在光标处插入指定内容
2007/05/25 Javascript
jquery插件之信息弹出框showInfoDialog(成功/错误/警告/通知/背景遮罩)
2013/01/09 Javascript
在jQuery中 常用的选择器介绍
2013/04/16 Javascript
网站繁简切换的JS遇到页面卡死的解决方法
2014/03/12 Javascript
Nodejs使用mysql模块之获得更新和删除影响的行数的方法
2014/03/18 NodeJs
页面get请求 中文参数方法乱码问题的快速解决方法
2016/05/31 Javascript
常用JS图片滚动(无缝、平滑、上下左右滚动)代码大全(推荐)
2016/12/20 Javascript
node.js使用redis储存session的方法
2018/09/26 Javascript
微信小程序使用二次贝塞尔曲线画波浪
2018/12/25 Javascript
微信小程序转发事件实现解析
2019/10/22 Javascript
webpack 最佳配置指北(推荐)
2020/01/07 Javascript
Element Cascader 级联选择器的使用示例
2020/07/27 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
[01:32:10]NAVI vs VG Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
[01:33:25]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第一场 1月24日
2021/03/11 DOTA
Python中的is和id用法分析
2015/01/26 Python
python使用电子邮件模块smtplib的方法
2016/08/28 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
2018/12/26 Python
如何使用Python多线程测试并发漏洞
2019/12/18 Python
pytorch-RNN进行回归曲线预测方式
2020/01/14 Python
皇家阿尔伯特英国官方商店:Royal Albert骨瓷
2019/03/25 全球购物
说出一些常用的类,包,接口
2014/09/22 面试题
10的分与合教学反思
2014/04/30 职场文书
保护环境倡议书300字
2014/05/19 职场文书
医学专业毕业生求职信
2014/06/20 职场文书
法人委托书
2014/07/31 职场文书
领导班子作风建设剖析材料
2014/10/11 职场文书
售房协议书范本
2015/08/11 职场文书
2016最新离婚协议书范本及程序
2016/03/18 职场文书