• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP – 面向对象

php 搞代码 3年前 (2022-01-24) 35次浏览 已收录 0个评论
文章目录[隐藏]

PHP — 面向对象
<?xml version=”1.0″ encoding=”utf-8″?>PHP – 面向对象<meta http-equiv=”Content-Type” content=”text/html;charset=utf-8″/><meta name=”generator” content=”Org-mode”/><meta name=”author” content=”sunx”/><link rel=”stylesheet” href=”/home/sunx/Work/style/cnblog.css” type=”text/css”/><body>

PHP – 面向对象

Table of Contents

  • 函数调用
  • 有 __clone 和无 __clone
  • 继承
  • protected
  • static
  • final
  • const
  • 后期绑定, 又叫延迟绑定
  • 单例模式 instanceof
  • 魔术方法
  • 重载 覆盖
  • 魔术常量
  • 抽象类和接口
  • 命名空间
  • 其他对象方法
  • 自动加载
  • TODO SPL 函数

函数调用

<span style="color: #00ffff">class</span> <span style="color: #98fb98">test</span> {    <span style="color: #00ffff">public</span> <span style="color: #00ffff">function</span> <span style="color: #87cefa">f1</span>() {        <span style="color: #00ffff">echo</span> <span style="color: #ffa07a">'you call me!'</span>;    }    <span style="color: #00ffff">public</span> <span style="color: #00ffff">function</span> <span style="color: #87cefa">f2</span>() {        f1();    }}<span style="color: #ffffff;background-color: #000000">$</span><span style="color: #eedd82">t</span> = <span style="color: #00ffff">new</span> <span style="color: #98fb98">test</span>();<span style="color: #ffffff;background-color: #000000">$</span><span style="color: #eedd82">t</span>-><span style="color: #ffffff;background-color: #000000">f2</span>();                  <span style="color: #ff7f24">// </span><span style="color: #ff7f24">报错</span><span style="color: #ff7f24">// </span><span style="color: #ff7f24">public function f2() {  // 正确</span><span style="color: #ff7f24">//     </span><span style="color: #ff7f24">self::f1();</span><span style="color: #ff7f24">// </span><span style="color: #ff7f24">}</span><span style="color: #ff7f24">// </span><span style="color: #ff7f24">public function f2() {  // 正确</span><span style="color: #ff7f24">//     </span><span style="color: #ff7f24">static::f1();</span><span style="color: #ff7f24">// </span><span style="color: #ff7f24">}</span>

有 __clone 和无 __clone

一个值得注意的地方 __clone() cannot accept any arguments
  1. 直接赋值 (复制), 不会产生新的对象
    <span style="color: #00ffff">class</span> <span style="color: #98fb98">test</span> {    <span style="color: #00ffff">public</span> <span style="color: #00ffff">function</span> <span style="color: #87cefa">__construct</span>() {        <span style="color: #00ffff">echo</span> <span style="color: #ffa07a">'ok'</span>;    }    <span style="color: #00ffff">public</span> <span style="color: #00ffff">function</span> <span style="color: #87cefa">__destruct</span>() {        <span style="color: #00ffff">echo</span> <span style="color: #ffa07a">'fail'</span>, <span style="color: #ffa07a">'<br>'</span>;    }}<span style="color: #ffffff;background-color: #000000">$</span><span style="color: #eedd82">a</span> = <span style="color: #00ffff">new</span> <span style="color: #98fb98">test</span>();<span style="color: #ffffff;background-color: #000000">$</span><span style="color: #eedd82">b</span> = <span style="color: #ffffff;background-color: #000000">$</span><span style="color: #eedd82">a</span>;               <span style="color: #ff7f24">// </span><span style="color: #ff7f24">指向同一个内存空间</span><span style="color: #00ffff">echo</span> <span style="color: #ffa07a">'<hr>'</span>;<span style="color: #ff7f24">// </span><span style="color: #ff7f24">ok</span><span style="color: #ff7f24">// </span><span style="color: #ff7f24">-----</span><span style="color: #ff7f24">// </span><span style="color: #ff7f24">fail</span>

  2. clone 会生成一个新的对象, 但不会调用构造函数
    <span style="color: #00ffff">class</span> <span style="color: #98fb98">test</span> {    <span style="color: #00ffff">public<i>*本5文来源gaodai$ma#com搞$$代**码)网@</i><img>搞代码gaodaima</img></span> <span style="color: #00ffff">function</span> <span style="color: #87cefa">__construct</span>() {        <span style="color: #00ffff">echo</span> <span style="color: #ffa07a">'ok'</span>;    }    <span style="color: #00ffff">public</span> <span style="color: #00ffff">function</span> <span style="color: #87cefa">__destruct</span>() {        <span style="color: #00ffff">echo</span> <span style="color: #ffa07a">'fail'</span>, <span style="color: #ffa07a">'<br>'</span>;    }}<span style="color: #ffffff;background-color: #000000">$</span><span style="color: #eedd82">a</span> = <span style="color: #00ffff">new</span> <span style="color: #98fb98">test</span>();<span style="color: #ffffff;background-color: #000000">$</span><span style="color: #eedd82">b</span> = <span style="color: #00ffff">clone</span> <span style="color: #ffffff;background-color: #000000">$</span><span style="color: #eedd82">a</span>;         <span style="color: #ff7f24">// </span><span style="color: #ff7f24">指向不同的 内存空间</span><span style="color: #00ffff">echo</span> <span style="color: #ffa07a">'<hr>'</span>;<span style="color: #ff7f24">// </span><span style="color: #ff7f24">ok</span><span style="color: #ff7f24">// </span><span style="color: #ff7f24">---------------</span><span style="color: #ff7f24">// </span><span style="color: #ff7f24">fail</span><span style="color: #ff7f24">// </span><span style="color: #ff7f24">fail</span>

  3. __clone 调用析构函数
    <span style="color: #00ffff">class</span> <span style="color: #98fb98">test</span> {    <span style="color: #00ffff">public</span> <span style="color: #00ffff">function</span> <span style="color: #87cefa">__construct</span>() {        <span style="color: #00ffff">echo</span> <span style="color: #ffa07a">'ok'</span>, <span style="color: #ffa07a">'<br>'</span>;    }    <span style="color: #00ffff">public</span> <span style="color: #00ffff">function</span> <span style="color: #87cefa">__destruct</span>() {        <span style="color: #00ffff">echo</span> <span style="color: #ffa07a">'fail'</span>, <span style="color: #ffa07a">'<br>'</span>;    }    <span style="color: #00ffff">public</span> <span style="color: #00ffff">function</span> <span style="color: #87cefa">__clone</span>() {        <span style="color: #00ffff">return</span> <span style="color: #00ffff">self</span>::__construct();    }}<span style="color: #ffffff;background-color: #000000">$</span><span style="color: #eedd82">a</span> = <span style="color: #00ffff">new</span> <span style="color: #98fb98">test</span>();<span style="color: #ffffff;background-color: #000000">$</span><span style="color: #eedd82">b</span> = <span style="color: #00ffff">clone</span> <span style="color: #ffffff;background-color: #000000">$</span><span style="color: #eedd82">a</span>;         <span style="color: #ff7f24">// </span><span style="color: #ff7f24">指向不同的 内存空间</span><span style="color: #00ffff">echo</span> <span style="color: #ffa07a">'<hr>'</span>;<span style="color: #ff7f24">// </span><span style="color: #ff7f24">ok</span><span style="color: #ff7f24">// </span><span style="color: #ff7f24">ok</span><span style="color: #ff7f24">// </span><span style="color: #ff7f24">-----</span><span style="color: #ff7f24">// </span><span style="color: #ff7f24">fail</span><span style="color: #ff7f24">// </span><span style="color: #ff7f24">fail</span>

继承

<span style="color: #b0c4de"><?php</span><span style="color: #00ffff">class</span> <span style="color: #98fb98">A</span> {    <span style="color: #00ffff">function</span> <span style="color: #87cefa">foo</span>() {        <span style="color: #00ffff">if</span> (<span style="color: #00ffff">isset</span>(<span style="color: #ffffff;background-color: #000000">$</span><span style="color: #7fffd4">this</span>)) {            <span style="color: #00ffff">echo</span> <span style="color: #ffa07a">'this is defined ('</span>,  get_class(<span style="color: #ffffff;background-color: #000000">$</span><span style="color: #7fffd4">this</span>), <span style="color: #ffa07a">')'</span>, <span style="color: #ffa07a">'<br>'</span>;        } <span style="color: #00ffff">else</span> {            <span style="color: #00ffff">echo</span> <span style="color: #ffa07a">'this is not defined'</span>, <span style="color: #ffa07a">'<br>'</span>;        }    }}<span style="color: #00ffff">class</span> <span style="color: #98fb98">B</span> {    <span style="color: #00ffff">function</span> <span style="color: #87cefa">bar</span>() {        <span style="color: #7fffd4">A</span>::foo();    }}<span style="color: #ffffff;background-color: #000000">$</span><span style="color: #eedd82">a</span> = <span style="color: #00ffff">new</span> <span style="color: #98fb98">A</span>();                   <span style="color: #ff7f24">// </span><span style="color: #ff7f24">this 变成 A</span><span style="color: #ffffff;background-color: #000000">$</span><span style="color: #eedd82">a</span>-><span style="color: #ffffff;background-color: #000000">foo</span>();<span style="color: #7fffd4">A</span>::foo();<span style="color: #ff7f24">// </span><span style="color: #ff7f24">this is defined (A)</span><span style="color: #ff7f24">// </span><span style="color: #ff7f24">this is not defined</span><span style="color: #ffffff;background-color: #000000">$</span><span style="color: #eedd82">b</span> = <span style="color: #00ffff">new</span> <span style="color: #98fb98">B</span>();                   <span style="color: #ff7f24">// </span><span style="color: #ff7f24">this 变成 B</span><span style="color: #ffffff;background-color: #000000">$</span><span style="color: #eedd82">b</span>-><span style="color: #ffffff;background-color: #000000">bar</span>();<span style="color: #7fffd4">B</span>::bar();<span style="color: #ff7f24">// </span><span style="color: #ff7f24">this is defined (B)</span><span style="color: #ff7f24">// </span><span style="color: #ff7f24">this is not defined</span>


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP – 面向对象
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址