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 相关文章推荐
推荐文章系统(一)
Oct 09 PHP
php MYSQL 数据备份类
Jun 19 PHP
过滤掉PHP数组中的重复值的实现代码
Jul 17 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
Apr 25 PHP
PHP exif扩展方法开启详解
Jul 28 PHP
ThinkPHP中处理表单中的注意事项
Nov 22 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
Mar 07 PHP
php 类自动载入的方法
Jun 03 PHP
PHP模拟asp.net的StringBuilder类实现方法
Aug 08 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
Aug 18 PHP
Linux下编译redis和phpredis的方法
Apr 07 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 27 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
人大复印资料处理程序_查询篇
2006/10/09 PHP
phpmyadmin 常用选项设置详解版
2010/03/07 PHP
ThinkPHP3.2.2的插件控制器功能
2015/03/05 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
2020/08/24 PHP
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
2012/12/11 Javascript
gridpanel动态加载数据的实例代码
2013/07/18 Javascript
js捕获鼠标滚轮事件代码
2013/12/16 Javascript
微信开发 消息推送实现代码
2016/10/21 Javascript
javascript表达式和运算符详解
2017/02/07 Javascript
node.js中grunt和gulp的区别详解
2017/07/17 Javascript
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
2018/10/12 Javascript
nodejs基础之常用工具模块util用法分析
2018/12/26 NodeJs
vue中使用 pako.js 解密 gzip加密字符串的方法
2019/06/10 Javascript
nodejs中各种加密算法的实现详解
2019/07/11 NodeJs
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
2020/08/03 Javascript
在vue中使用回调函数,this调用无效的解决
2020/08/11 Javascript
Python解析Excle文件中的数据方法
2018/10/23 Python
python使用Turtle库绘制动态钟表
2018/11/19 Python
Python Selenium 设置元素等待的三种方式
2020/03/18 Python
python如何实时获取tcpdump输出
2020/09/16 Python
html5 http的轮询和Websocket原理
2018/10/19 HTML / CSS
英国最大线上综合鞋类商城:Office
2017/12/08 全球购物
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
农行实习自我鉴定
2013/09/22 职场文书
网络工程师个人的自我评价范文
2013/10/01 职场文书
餐饮企业总经理岗位职责范文
2014/02/18 职场文书
材料加工工程求职信
2014/02/19 职场文书
教师政风行风自查自纠报告
2014/10/21 职场文书
六年级学生期末评语
2014/12/26 职场文书
世界环境日活动总结
2015/02/11 职场文书
Nginx访问日志及错误日志参数说明
2021/03/31 Servers
Python字符串对齐方法使用(ljust()、rjust()和center())
2021/04/26 Python
Python爬虫框架之Scrapy中Spider的用法
2021/06/28 Python
Python面试不修改数组找出重复的数字
2022/05/20 Python