45.属性和方法-php课件.pptx

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
45.属性和方法-php课件

属性和方法 public 和 private public和private都是访问控制符,在前面的例子中,所有的属性和方法都是public关键词 public表示公开的意思,标记为public的属性和方法,可以通过对象直接读取或调用 与之相反,还有一个private关键词,一旦设置为private,属性或者方法,只能在类的内部使用,不可以通过对象来读取或调用 与现实世界一致,一个人的外表特征可以看所是public的属性,听、说、看则是public的方法;相反,人的大脑确是private的属性,心跳、消化、思考等行为都是private的方法 练习 假设User类中新增一个私有的属性$foo private $foo = bar; 请尝试是否可以直接获取或者修改foo的值 请在不修改访问控制符的情况下,让代码可以通过$user对象获取到字符串bar 问题 在前面的学习过程中,我们掌握了类的定义,对象的实例化,对象的属性的赋值、对象方法的调用 但是,这些操作中,存在一个致命的问题: 如果我们实例化对象后忘记给对象的属性赋值,而直接去调用方法,很有可能无法返回正确的数据,甚至会报错 $user = new User(); echo $user-getAge(); 有没有什么办法能确保在方法调用之前数据都能正确的赋值到属性上? 构造函数 在类的定义中,有一个特殊的函数叫做构造函数,顾名思义,它的主要作用就是用来在实例化时构造一个对象 class cls_name {     public function __construct() {     } } 函数名必须是__construct(注意是双下划线),在实例化时PHP会自动调用(尽管也可以再次手工去调用,但是几乎很少这么做)这个函数。如果把我们的类比作是一个操作系统,那么可以把构造函数想象成:开机启动的程序 实例化参数 $user = new User(); 大家还记得前面的课程中,对象实例化时所强调的,即使类名后面可以不加圆括号,但是我们还是要求务必保留 一个类名后面加上圆括号,咋一看倒是有点像是函数,是不是可以传一点参数进去呢?答案是肯定的 $user = new User($name, $birthday); 那么参数在类里面又是如何获取到的呢? 构造函数传参 实例化对象时,在类名后面传递的参数实际上最终都是传递给了构造函数,因此实例化时传入的参数类型和个数必须与构造函数中定义的保持一致,在User类中定义构造函数 public function __construct($name, $birthday, $height, $weight, $married = true) { } 再执行$user = new User();发现会有什么不同? 有了构造函数,虽然赋值的代码并没有减少太多,但是至少保证:实例化的同时属性就能赋值,避免出现忘记赋值就执行方法的情况 练习 前面的例子中,我们已经定义了一个构造函数及其参数定义,请完善User类,将构造函数中获取到的数据对对象的属性进行初始化(提示回忆$this的使用) 保证实例化完成后 echo $user-name; 或者 echo $user-getAge(); 就可以直接操作了 析构函数 实际上在PHP中与构造函数对应的还有一个析构函数__destruct,在对象被销毁时自动调用 public function __destruct() {     echo I’m over; } 如果添加了上面的方法,我们可以看到在程序最后会自动输出 I’m over,因为PHP脚本执行结束后变量占用的内存会被自动释放,如果在代码中间直接执行unset($user),也会触发__destruct的执行 由于PHP可以自动释放内存,所以一般我们不需要设置析构函数 思考 我们的$user对象实例化后,通过$user-name或者$user-height可以直接获取到对象的属性值 那么,如果尝试获取一个压根就没定义的属性呢? echo $user-notexists; 上面的代码执行后会有什么结果? 我们会得到一个Notice警告 Undefined property: User::$notexists __get PHP的神奇之处在于,如果程序里去请求一个未定义的属性,我们甚至可以通过某些方式获取到用户请求的属性名称,而不让程序出现警告信息,我们使用__get方法(注意,__get也是双下划线) public function __get($name) {     echo $name; } 如果用户请求的是$user-name,__get方法不会被调用,反之,如果是$user-foo,程序发现属性里没有foo则去检查类中是否定义了__get,

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档