不能在 PHP 类上使用 public 修饰符

Posted

技术标签:

【中文标题】不能在 PHP 类上使用 public 修饰符【英文标题】:Cannot use public modifier on PHP class 【发布时间】:2012-08-31 02:39:00 【问题描述】:

我在 Java 方面有很强的基础,而当谈到 php 时,我在 OOP 方面遇到了一些问题。

请看下面这两个类:

Contacts.php

<?php 

    public class Contacts 

    
?>

UnitTest.php

<?php

    require_once 'PHPUnit/Framework.php';
    include 'Contacts.php';

    class UnitTest extends PHPUnit_Framework_TestCase 

        public function testRead() 
            $temp = new Contacts();
        
    
?>

当我尝试使用 phpunit 测试 UnitTest.php 时,我收到了以下错误消息:

PHP Parse error:  syntax error, unexpected T_PUBLIC in
    /home/crazenezz/Projects/PHP/Demo/Class/Contacts.php on line 3

经过反复试验,我删除了Contacts 类的public 修饰符,测试成功且没有错误。

Contacts.php (删除public修饰符后)

<?php 

    class Contacts 

    
?>

谁能解释为什么在 PHP 中我不能使用 public 作为 class 的修饰符?

【问题讨论】:

这在你的情况下甚至没有意义,因为你不在命名空间中。 不知道为什么有人反对这个问题,因为它完全有效。赞成它。 @Bgi:not in a namespace是什么意思? @Crazenezz 他的意思是public 而不是... private?在那种情况下,私有对什么?唯一想到的是命名空间的private/public。但是 PHP 没有命名空间的可见性修饰符。 @Crazenezz deceze 解释得比我好;) 【参考方案1】:

因为所有类在 PHP 中都是公共的。没有所谓的“私人课程”。

【讨论】:

【参考方案2】:

在 PHP 中,您只能在变量和函数前面使用 public 修饰符。 在 Java 中,您可以在类、构造函数、方法、变量或接口前面使用 public 修饰符。为什么?因为语言不同。如果您需要注释来提醒自己,我在这里写了一些东西来解释 PHP 修饰符和 Java 修饰符之间的区别,因为我在 PHP 之前也学习了 Java。 http://www.siteconsortium.com/h/D0000G.php

【讨论】:

以上是关于不能在 PHP 类上使用 public 修饰符的主要内容,如果未能解决你的问题,请参考以下文章

(十五)访问权限控制修饰符

PHP中有三种访问修饰符 默认是public

修饰符

PHP面向对象静态变量

Java中常用修饰符使用汇总

PHP面向对象访问(权限)的三个修饰符之间的区别