PHP 中 this self parent 用法

self:: 调用本类属性、方法;可以抑制方法多态性。 parent:: 调用父类属性、方法。 static:: 调用静态属性、方法;可以体现多态性。 $this-> 调用本实例的属性、方法;$this:: 可以调用静态属性、方法;但是无法在静态方法里使用;可以体现多态性。 -> object-operator, you always know you’re dealing with an instance. :: scope-resolution-operator, you need more information about the context. <?php class A { public static function newStaticClass() { return new static(); } public static function newSelfClass() { return new self(); } public function newThisClass() { return new $this(); } } class B extends A { public function newParentClass() { return new parent(); } } class C extends B { public static function newSelfClass() { return new self(); } } $c = new C(); var_dump($c::newStaticClass()); // C and is same C::newStaticClass() var_dump($c::newSelfClass()); // C because self now points to "C" class var_dump($c->newThisClass()); // C var_dump($c->newParentClass()); // A because parent was defined *way back* in class "B" References php - When to use self over $this? - Stack Overflow

May 25, 2017 · 1 min · 136 words · Me

【摔跤吧,爸爸】随笔

周末看了《摔跤吧,爸爸》,也是第一次独自电影院看电影,试写一篇影评纪念下。 注意:严重剧透预警。 主角爸爸是印度全国摔跤冠军,一心想着为国家赢取一枚金牌。可自己没能实现梦想,把梦想转移给了自己还未出世的孩子。可事与愿违,想要男孩的主角爸爸的前三个孩子都是女孩,第四个还是女孩。主角爸爸近乎要放弃为国争取金牌的梦想时,却意外看的了大女儿、二女儿身上的摔跤天赋。 主角妈妈在得知主角爸爸准备将女儿们训练为拳击手时,道出了 “你不能将你的梦想施加在女儿们身上”,主角爸爸沉思片刻 “给我一年时间,其间你不要插手,如果没成功,我将有永远放弃我的梦想”。在主角爸爸说出这句话之前,我是反对父母将自己的梦想让孩子去实现的,也更没有去争取过孩子们的想法,现实中这样做的父母我是常为 Loser. 但是主角爸爸的回答让我看到的不是一个:被自己个人梦想冲昏头,用孩子的全部去成就自己的父亲。主角爸爸是讲道理的,一年后如果失败也会甘愿放弃。坚持与固执的区别也许就在此。 主角爸爸变身为女儿们的魔鬼摔跤教练,每天除了上学就是训练,跑步时衣服不合适换男生衣服,找侄子当陪练,没有力量加餐牛奶、鸡肉,长头发难清理剪成了寸头。受苦中的女儿们找妈妈求情,主角妈妈遵守承诺,不干预主角爸爸的训练。这里真的要给主角妈妈点赞,后面女儿们的成功,女儿们、主角爸爸的努力在明面放着,而主角妈妈的守诺不干预,对主角爸爸的信赖,是同样的伟大。不然那柔弱的耳边风不知乱了多少坚定的意志。 训练太辛苦的女儿们采用消极怠工对抗主角爸爸。破坏闹钟、破坏场地、假摔示弱。而旷工一天参加好友的婚礼现场被主角爸爸收拾。在与好友诉苦时,才发现了:对比其他女孩一望到底的家庭妇女人生,主角爸爸的狠心是那样让人羡慕。 观念改变的女儿们开始主动训练。大女儿首次参赛就初露锋芒,差一点将男孩对手打败。逐渐成长的大女儿愈战愈勇的直到赢得全国冠军。全国冠军都会进入国家体育学校学习,大女儿也要离开主角爸爸接受新教练的训练,备战世界大赛。从小镇走出来的大女儿,没了主角爸爸的严格管束,开始着迷于这外面多彩的世界。吃油炸食品、留起头发、逛街、电影院。假期回家的大女儿用自己新学的技巧击败了主角爸爸,更是产生自我膨胀,对主角爸爸传统技术技巧的不屑与不信任。 国际大赛上大女儿频频失利,无能教练将此归为命运。与此同时坚信主角爸爸训练方式的二儿女也获得全国冠军,进入国家队。在二儿女和主角妈妈的劝解下,一通电话化解了大女儿和主角爸爸的隔阂。主角爸爸亲自来到体育学校,为大女儿备战下次的国际大赛。 主角爸爸在仔细研究大女儿对手后,制定了针对性的战术帮助大女儿杀入决赛。无能教练为了不让主角爸爸抢了自己的功劳,在决赛开始前将主角爸爸骗入小黑屋,无法让主角爸爸指导大女儿比赛。决赛第二局大女儿没能把握赛点,让对手追平。主角爸爸继续被困,只能默默祈祷。决赛最后一局,大女儿大比分落后,最后 10 秒大女儿脑海闪现着主角爸爸的叮咛,一击 5 分绝杀翻盘,赢得世界冠军。冠军的国歌声奏起,小黑屋中的主角爸爸也被路人解救,冲入赛场的主角爸爸与大女儿四目相对,此时这已经不是大女儿或主角爸爸哪一个人的冠军,而是所有正在与命运抗战者的胜利。 主角爸爸:“你是我的骄傲” 电影的专业手法和技术自己不懂,但是自己有个感觉:影片后期有大量的摔跤比赛,时不时有种看奥运赛的感觉,但是自己并没有感到乏味。电影故事情节很寻常,但是娓娓道来,很多细节小事让节奏不拖沓。故事人物有主角爸爸的理性和坚持、主角妈妈的守诺不干预、女儿们自我的成长、侄子的酱油加醋、无能教练损人为己 电影给我也留下了几个现实问题: 父母的认识经验一定比子女高的多,主角爸爸在看到女儿们的摔跤天赋时,狠心训练与女儿本身的意愿如何选择? 父母逐渐变老,他们真的跟不上我们了吗? 如何辨别无能教练的瞎指挥? – EOF –

May 14, 2017 · 1 min · 26 words · Me

区分 CGI FastCGI PHP-CGI PHP-FPM

更新 2023-03-20 提问 ChatGPT 3.5 CGI(Common Gateway Interface)是一种通用的 Web 服务器接口标准,它定义了 Web 服务器和应用程序之间进行通信的方式。CGI 程序在每次请求时都会启动一个新的进程,处理完请求后就会结束进程,因此效率较低。 FastCGI 是 CGI 的一种改进技术,它使用长连接的方式,使得多次请求可以在同一个进程中处理,从而提高了效率。 PHP-CGI 是 PHP 的 CGI 版本,它可以让 PHP 脚本在 Web 服务器上运行,但由于 CGI 的低效率,PHP-CGI 的性能也比较低。 PHP-FPM(PHP FastCGI Process Manager)是一个用于管理 PHP FastCGI 进程的工具,它可以提高 PHP 的性能和稳定性。 关联和区别: CGI 和 FastCGI 都是 Web 服务器和应用程序之间通信的方式,但 FastCGI 在性能上比 CGI 更好。 PHP-CGI 和 PHP-FPM 都是 PHP 在 Web 服务器上运行的方式,但 PHP-FPM 可以有效提高 PHP 的性能和稳定性。 作用举例: 如果使用 CGI 或 PHP-CGI 来运行 PHP 脚本,每次请求都需要启动一个新的进程,效率较低。而如果使用 FastCGI 或 PHP-FPM,则可以使用长连接的方式,提高效率。 使用 PHP-FPM 时,可以配置多个进程,通过负载均衡的方式来分担请求,从而提高稳定性。 CGI Common Gateway Interface,HTTP 服务器与你的或其它机器上的程序进行“交谈”的一种协议,其程序须运行在网络服务器上。 ...

April 21, 2017 · 2 min · 244 words · Me

MySQL 5.6 5.7 组内排序的区别

MySQL 5.7 对比 5.6 有很多的变化。一个常见的需求:按条件分组后,取出每组中某字段最大值的那条记录。其实就是组内排序的问题,我的做法是:子查询先进行倒序排序,外层查询分组。 示例 +----+----+-------+ | id | no | name | +----+----+-------+ | 5 | 5 | Mike | | 4 | 4 | Herry | | 3 | 3 | wyett | | 2 | 2 | John | | 7 | 2 | John | | 1 | 1 | Mike | | 6 | 1 | John | | 8 | 1 | Mike | | 9 | 1 | Mike | +----+----+-------+ 要求:取出每人(按 name),最大 no 的记录。 ...

April 20, 2017 · 4 min · 765 words · Me

MySQL 管理用户与访问授权

MySQL 创建用户、修改密码、删除用户;查看、授予、撤销用户权限;对 MySQL 远程访问的新理解。 -- 创建用户 + 授权 GRANT ALL PRIVILEGES ON _._ TO 'tom'@'%' IDENTIFIED BY 'pwd123' WITH GRANT OPTION; -- 查询权限 SHOW GRANTS FOR 'tom'@'%'; -- 授权 GRANT SELECT ON `my_db`.* TO 'tom'@'%'; -- 撤权 REVOKE ALL PRIVILEGES ON `my_db`.* FROM 'tom'@'%'; REVOKE GRANT OPTION ON `my_db`.* from 'tom'@'%'; -- not necessary FLUSH PRIVILEGES; 管理用户 创建用户 CREATE USER 'username'@'host' IDENTIFIED BY 'password'; username:创建的用户名 host:该用户在哪个主机上可以登陆。如果是本地用户可用 localhost;如果想让该用户可以从任意远程主机登陆,可以使用通配符 % password:该用户的登陆密码。密码可以为空,如果为空则该用户可以不需要密码登陆服务器 例子: ...

April 11, 2017 · 2 min · 376 words · Me

Git 在工作目录之间使用 push 进行同步

Pushing to a non-bare repo is now possible (Git 2.3.0 February 2015). And it is possible when you are pushing the branch currently checked out at the remote repo! 现在已经是可以在俩个 non-bare 的仓库之间推送代码。 只需要再远程仓库配置: git config receive.denyCurrentBranch updateInstead 就可以直接 push 分支到远程,并更新工作区。此方法可以用于项目部署。 receive-pack: add another option for receive.denyCurrentBranch When synchronizing between working directories, it can be handy to update the current branch via ‘push’ rather than ‘pull’, e.g. when pushing a fix from inside a VM, or when pushing a fix made on a user’s machine (where the developer is not at liberty to install an ssh daemon let alone know the user’s password). ...

March 30, 2017 · 1 min · 184 words · Me

Git pull rebase 和 merge no-ff 保持提交线图整洁

git log 中的一个清晰的提交线图是很方便进行 code review 和代码回退 git pull --rebase 主要是为是将提交约线图平坦化,而 git merge --no-ff 则是刻意制造分叉 pull rebase perform a rebase after fetching 状况 Git 作为分布式版本控制系统,所有修改操作都是基于本地的,在团队协作过程中,假设你和你的同伴在本地中分别有各自的新提交,而你的同伴先于你 push 了代码到远程分支上,所以你必须先执行 git pull 来获取同伴的提交,然后才能 push 自己的提交到远程分支。 按照 Git 的默认策略,如果远程分支和本地分支之间的提交线图有分叉的话(即不是 fast-forwarded),Git 会执行一次 merge 操作,因此产生一次没意义的提交记录,从而造成了像上图那样的混乱。 解决 其实在 pull 操作的时候,使用 git pull --rebase 选项即可很好地解决上述问题。 加上 --rebase 参数的作用是,提交线图有分叉的话,Git 会 rebase 策略来代替默认的 merge 策略。 假设提交线图在执行 pull 前是这样的: A---B---C remotes/origin/master / D---E---F---G master 如果是执行 git pull 后,结果多出了 H 这个没必要的提交记录。提交线图会变成这样: ...

March 17, 2017 · 2 min · 231 words · Me

Git 修改提交历史

在使用 Git 时,我们经常会遇到修改本地提交记录的情况。比如:修改最近一次提交记,还比如:将多次小的 commit 合并成一个大的 commit。 这种做发有利也有弊,利在:review 代码时,可以按功能看,可以省去 review 一些前期写的无效的代码;弊是:一次提交修改过多,如果有问题,不利于调试。 具体情况具体分析,是解决问题的金句。 修改最近一次提交记录 修改提交说明 如果只想更改最近一次的提交说明,只需输入: git commit --amend 然后你就会进入文本编辑器,输入你想要的内容,保存并退出即可 改被提交的快照 如果你完成 commit 后又想修改被提交的快照,增加或者修改其中的文件。 先执行 git add 命令,将修改的文件添加到缓存区,然后运行 git commit -amend 命令,该命令会获取你当前的暂存区的内容一并提交到最后一次 commit 例如:新加了一个文件 new_file.cpp ,想要合并到最后一次提交,过程如下: git add new_file.cpp git commit -amend 也可以直接运行下面的命令,不过要小心,不要提交了多余的文件 git commit -a -amend 将文件从本次提交中移除 如果想把已经 commit 的文件从这次 commit 移除的话,运行命令: git reset [-soft] HEAD~1 # -soft可加可不加,默认就是soft选项 git checkout -filename # 要从本次提交移除的文件名 git commit -m "new commit" 修改多个提交记录 要修改历史中更早的提交,你必须采用更复杂的工具。Git 没有一个修改历史的工具,但是你可以使用 rebase 工具来衍合一系列的提交到它们原来所在的 HEAD 上。 ...

March 13, 2017 · 3 min · 531 words · Me

PHP empty 方法判断 0.0

在使用 empty(mixed $var) 时要考虑 $var 的 类型,尤其是在判断数据库查询后的字段。 bool empty(mixed $var) 以下的东西被认为是空 true 的: ""(空字符串) 0 (作为整数的 0) 0.0 (作为浮点数的 0) "0" (作为字符串的 0) NULL FALSE array() 一个空数组 $var 未初始化的变量 new stdClass() 不包含任何属性的对象 注意: string 的判断要非常注意,数据库查询后的字段常常为 string,应该进行正确的类型转换。 以下的东西被认为是非空 false 的: $var = true; $var = 1; $var = -1; $var = “0.0”; $var = “foo”; $var = array(0); $var = new stdClass(); $var->property = null; $str = '0.0'; echo empty($str); // false 很可能和预期是相反的 echo empty((float)$str); // true – EOF – ...

March 9, 2017 · 1 min · 79 words · Me

IMOOC HTML+CSS 基础课程笔记

【注意】内容不再维护。 HTML+CSS 基础课程-慕课网 2017 年一个心愿,认真学习前端,成为公司里最厉害前端工程师。Flag 立的还是很大的。 第 1 章 HTML 介绍 HTML 是网页内容的载体。内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字、图片、视频等。 CSS 样式是表现。就像网页的外衣。比如,标题字体、颜色变化,或为标题加入背景图片、边框等。所有这些用来改变内容外观的东西称之为表现。 JavaScript 是用来实现网页上的特效效果。如:鼠标滑过弹出下拉菜单。或鼠标滑过表格的背景颜色改变。还有焦点新闻(新闻图片)的轮换。可以这么理解,有动画的,有交互的一般都是用 JavaScript 来实现的。 第 2 章 认识标签(第一部分) 常常会听到一个词,语义化。说的通俗点就是:明白每个标签的用途(在什么情况下使用此标签合理)。 比如,网页上的文章的标题就可以用标题标签,网页上的各个栏目的栏目名称也可以使用标题标签。文章中内容的段落就得放在段落标签中,在文章中有想强调的文本,就可以使用 em 标签表示强调等等。 语义化可以给我们带来什么样的好处呢? 更容易被搜索引擎收录。 更容易让屏幕阅读器读出网页内容。 1、在网页上要展示出来的页面内容一定要放在 body 标签中; 2、如果想在网页上显示文章,这时就需要 <p> 标签了,把文章的段落放到 <p> 标签; <p>段落文本</p> 3、标题标签一共有 6 个,h1、h2、h3、h4、h5、h6 分别为一级标题、二级标题、三级标题、四级标题、五级标题、六级标题。并且依据重要性递减。<h1> 是最高的等级: <hx>标题文本</hx> <!-- x为1-6 --> 4、在一段话中特别强调某几个文字,这时候就可以用到 <em> 或 <strong> 标签。在浏览器中 <em> 默认用斜体表示,<strong> 用粗体表示。两个标签相比,目前国内前端程序员更喜欢使用 <strong> 表示强调: <em>需要强调的文本</em> <strong>需要强调的文本</strong> 5、<span> 标签是没有语义的,它的作用就是为了设置单独的样式用的: <span>文本</span> 6、想引用某个作家的一句诗,这样会使你的文章更加出彩,那么 <q> 标签是你所需要的: <q>引用文本</q> 7、<blockquote> 的作用也是引用别人的文本。但它是对长文本的引用,如在文章中引入大段某知名作家的文字,这时需要这个标签。 ...

February 23, 2017 · 10 min · 2060 words · Me