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

发布时间 - 2026-01-10 22:08:40    点击率:

本文实例讲述了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基本语法入门教程》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

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


# PHP  # 面向对象  # 程序设计  #   # 定义  # 用法  # PHP入门教程之面向对象的特性分析(继承  # 多态  # 接口  # 抽象类  # 抽象方法等)  # PHP面向对象程序设计高级特性详解(接口  # 继承  # 析构  # 克隆等)  # php面向对象全攻略 (十二) 抽象方法和抽象类  # php面向对象全攻略 (十七) 自动加载类  # PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约  # PHP面向对象程序设计之类常量用法实例  # PHP面向对象程序设计之类与反射API详解  # PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解  # PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)  # PHP学习记录之面向对象(Object-oriented programming  # OOP)基础【类、对象、继承等】  # 操作技巧  # 相关内容  # 感兴趣  # 给大家  # 更多关于  # 所述  # 运算符  # 编程技巧  # 讲述了  # function  # __construct  # private  # sex  # age  # method  # public  # visibility  # gt 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 微信小程序 canvas开发实例及注意事项  详解MySQL数据库的安装与密码配置  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  如何快速生成高效建站系统源代码?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  如何登录建站主机?访问步骤全解析  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  如何用已有域名快速搭建网站?  Swift中switch语句区间和元组模式匹配  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  Python进程池调度策略_任务分发说明【指导】  如何用AWS免费套餐快速搭建高效网站?  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  java ZXing生成二维码及条码实例分享  用v-html解决Vue.js渲染中html标签不被解析的问题  浅谈redis在项目中的应用  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  网站制作价目表怎么做,珍爱网婚介费用多少?  如何续费美橙建站之星域名及服务?  如何在 React 中条件性地遍历数组并渲染元素  浅谈javascript alert和confirm的美化  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  Laravel如何创建自定义Artisan命令?(代码示例)  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  Linux系统运维自动化项目教程_Ansible批量管理实战  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  如何构建满足综合性能需求的优质建站方案?  详解Android图表 MPAndroidChart折线图  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  如何正确选择百度移动适配建站域名?  网站制作报价单模板图片,小松挖机官方网站报价?  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  Laravel如何保护应用免受CSRF攻击?(原理和示例)  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  js实现点击每个li节点,都弹出其文本值及修改  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  佛山网站制作系统,佛山企业变更地址网上办理步骤?  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  Python文件异常处理策略_健壮性说明【指导】  javascript中的try catch异常捕获机制用法分析  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  iOS中将个别页面强制横屏其他页面竖屏  如何在IIS7中新建站点?详细步骤解析  网站页面设计需要考虑到这些问题