如何在没有静态的情况下使用Class :: Function(params)

时间:2015-02-01 15:38:16

标签: php

*对不起,我现在正在学习英语,我的英语仍然不太好。请理解我的情况。

据我所知,Static需要像Class :: Function(params)一样使用;
喜欢这个。

class Foo {
    static function Bar($msg){
        echo $msg;
    }
}

XE中有一个文件(在韩国开发的CMS) (XE官方网站:http://www.xpressengine.com/?l=en

当然,这是真实文件的摘要

<?php

/**
 * Manages Context such as request arguments/environment variables
 * It has dual method structure, easy-to use methods which can be called as self::methodname(),and methods called with static object.
 */

class Context
{
   /**
    * codes after <body>
    * @var string
    */
   public $body_header = NULL;

   /**
    * returns static context object (Singleton). It's to use Context without declaration of an object
    *
    * @return object Instance
    */
   function &getInstance()
   {
      static $theInstance = null;
      if(!$theInstance)
      {
         $theInstance = new Context();
      }
      return $theInstance;
   }

   /**
    * Add html code after <body>
    *
    * @param string $header Add html code after <body>
    */
   function addBodyHeader($header)
   {
      is_a($this, 'Context') ? $self = $this : $self = self::getInstance();
      $self->body_header .= "\n" . $header;
   }
}

这是此文件顶部的评论。

  

它具有双重方法结构,易于使用的方法可以调用   as self :: methodname(),以及使用静态对象调用的方法。

在这个评论中,它可以使用Class :: Function(),我一直在XE中使用 但它并没有告诉他们如何制作。我该怎么做呢?

编辑1:

该文件的名称是Context.class.php,它包含在其他文件中。

<?php
    require(_XE_PATH_ . 'classes/context/Context.class.php');
    Context::addBodyHeader("Some Codes");
?>

3 个答案:

答案 0 :(得分:2)

在这种情况下,他们使用self,它不需要静态,您可以将self::$this->进行比较,只是self::也适用于静态函数。

也许the manual会帮助你

答案 1 :(得分:2)

  

在这个评论中,它可以使用Class :: Function()并且我一直在使用它   XE。但它并没有告诉他们如何制作。我该怎么做呢?   ::称为scope resolution operator

他们如下:

class MyClass {
    public static function saySomething() {
        echo 'hello';
    }
     public function sayHello() {
        echo 'hello';
    }

    public function helloSay() {
        self::sayHello();
    }
}

MyClass::saySomething();

MyClass::sayHello();

MyClass::helloSay();

他们都输出:hello

答案 2 :(得分:1)

不确定这是否是您要做的,但您可以声明&#34;静态&#34;在php public static function methodName()中,然后使用Class::Method()调用该函数您还可以查看this以获取有关静态的更多数据。

修改

这是php.net

  

调用方法时,伪变量$ this可用   在对象上下文中。 $ this是对调用对象的引用   (通常是方法所属的对象,但可能是另一个   object,如果从a的上下文静态调用该方法   次要对象)。

所以基本上你可以这样做(调用类方法静态方式)。