菜单开关

周梦康 发表于 2017-09-27 1605 次浏览 标签 : php

实验演示

文件1

class Animal
{
    public $hasLeg = false;
}

文件2

include "Animal.php";

class Dog extends Animal
{
    protected $hasLeg = false;
}

$dog = new Dog();
php Dog.php

Fatal error: Access level to Dog::$hasLeg must be public (as in class Animal) in /Users/mengkang/vagrant-develop/project/untitled1/Dog.php on line 5

类似的故障经历

今天在看代码的时候看到一个变量一直重复查询,就是用户是否是管理员的身份。我想既然这样,不然在第一次用的地方就放入到成员变量里,免得后面都重复查询。

结果发现我在父类定义的变量名$isAdmin,之前的代码已经在某一个子类里面单独定义过了。父类里是public属性,而子类里是private导致了这个故障。

如果是 java 这种错误,无法编译通过。但是 php 不需要编译,既是优势也是弱势。

反思与整改

静态语法检测,不仅仅是增量代码,也需要考虑到历史的代码的关联性。

评论列表