【问题标题】:class defined as static member of another class类定义为另一个类的静态成员
【发布时间】:2012-03-13 06:33:32
【问题描述】:

我一直在 Java 中做这种类型的事情,我正在尝试弄清楚它是否可以在 PHP 中实现。如果可能的话,我希望语法看起来像这样,但我想知道是否有一些特殊的方法可以做到这一点(如果可能的话)。

class Foo {
   public static class FooBarException extends Exception {
   }
   public static class BarBazException extends Exception {
   }

   public function DoSomething() {
      try {
          // Calls to other class methods that can
          // throw FooBarException and BarBazException
      } catch (self::FooBarException $e) {
          // Stuff..
      }
   }
}

$bang = new Foo();
try {
   $bang->DoSomething();
} catch (Foo::BarBazException $e) {
   // Stuff..
}

【问题讨论】:

  • 顺便说一句,我忘记了是否有任何语言的实际名称。我以为是“子类”,但那会被用作“FooBarException 是 Exception 的子类”...
  • 除此之外,我认为您正在寻找“内部课程”,这里有一个类似问题的链接:stackoverflow.com/questions/4351782/… 简短回答是“否”
  • 也叫“嵌套类”。
  • @watcher 和 linepogl - 谢谢,这就是我找不到重复项的原因。 “成员班级”在搜索中一直被视为“班级成员”......

标签: php class member


【解决方案1】:

不,你不能。但是,在 PHP 5.3 中引入的是namespaces。使用命名空间,您可以类似地这样做:

<?php
namespace MyNamespace
{
    use Exception;

    class FooBarException
        extends Exception
    {
    }

    class FooBazException
        extends Exception
    {
    }

    class Foo
    {
        public function doSomething()
        {
            throw new FooBarException;
        }
    }
}

namespace AnotherNamespace
{
    $bang = new \MyNamespace\Foo;
    try {
        $bang->doSomething();
    } catch(\MyNamespace\FooBarException $up) {
        throw $up; // :)
    }
}

【讨论】:

  • 令人失望,但 +1 并接受,因为我什至不知道命名空间。
【解决方案2】:

不,这是不可能的。

不过,您可以使用命名空间来获得类似的效果。

【讨论】:

    【解决方案3】:

    你不能在 PHP 中这样做,但在 php 5.3 中你可以使用命名空间来实现类似的功能

    http://php.net/namespace

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-17
      • 1970-01-01
      • 2017-10-20
      • 2012-08-23
      • 2015-09-18
      相关资源
      最近更新 更多