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 相关文章推荐
很好用的PHP数据库类
May 27 PHP
基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室
Oct 31 PHP
php 截取字符串并以零补齐str_pad() 函数
May 07 PHP
用PHP写的基于Memcache的Queue实现代码
Nov 27 PHP
深入PHP curl参数的详解
Jun 17 PHP
php实现的DateDiff和DateAdd时间函数代码分享
Aug 16 PHP
php中unserialize返回false的解决方法
Sep 22 PHP
PHP的Socket通信之UDP通信实例
Jul 02 PHP
php实现通过soap调用.Net的WebService asmx文件
Feb 27 PHP
laravel 实现登陆后返回登陆前的页面方法
Oct 03 PHP
PHP pthreads v3下worker和pool的使用方法示例
Feb 21 PHP
PHP新手指南
Apr 01 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生成UTF8文件的方法
2010/05/15 PHP
IIS+fastcgi下PHP运行超时问题的解决办法详解
2013/06/20 PHP
使用PHP实现蜘蛛访问日志统计
2013/07/05 PHP
Thinkphp5.0自动生成模块及目录的方法详解
2017/04/17 PHP
Nigma vs Alliance BO5 第二场2.14
2021/03/10 DOTA
解决 FireFox 下[使用event很麻烦] 的问题.
2006/08/22 Javascript
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
Node.js:Windows7下搭建的Node.js服务(来玩玩服务器端的javascript吧,这可不是前端js插件)
2011/06/27 Javascript
JQuery 自定义CircleAnimation,Animate方法学习笔记
2011/07/10 Javascript
封装了一个js图片轮换效果的函数
2011/09/28 Javascript
html+css+js实现xp window界面及有关功能
2013/03/26 Javascript
Javascript中String的常用方法实例分析
2015/06/13 Javascript
jquery控制页面部分刷新的方法
2015/06/24 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
使用vue-router设置每个页面的title方法
2018/02/11 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
2018/11/04 Javascript
Windows系统下安装Python的SSH模块教程
2015/02/05 Python
Python编程中运用闭包时所需要注意的一些地方
2015/05/02 Python
Python中pygame的mouse鼠标事件用法实例
2015/11/11 Python
Python的网络编程库Gevent的安装及使用技巧
2016/06/24 Python
Flask实现跨域请求的处理方法
2018/09/27 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
Python向excel中写入数据的方法
2019/05/05 Python
利用Python校准本地时间的方法教程
2019/10/31 Python
python @propert装饰器使用方法原理解析
2019/12/25 Python
英国领先的男士美容护发用品公司:Mankind
2016/08/31 全球购物
What's the difference between an interface and abstract class? (接口与抽象类有什么区别)
2012/10/29 面试题
行政助理工作职责范本
2014/03/04 职场文书
健康家庭事迹材料
2014/05/02 职场文书
群众路线调研报告范文
2014/11/03 职场文书
管理失职检讨书范文
2015/05/05 职场文书
小学语文教学反思范文
2016/03/03 职场文书
十二月早安励志心语大全
2019/12/03 职场文书
vue+elementui 实现新增和修改共用一个弹框的完整代码
2021/06/08 Vue.js
讲解MySQL增删改操作
2022/05/06 MySQL