【问题标题】:Creating staitic method and calling the method in PHP在 PHP 中创建静态方法并调用该方法
【发布时间】:2015-03-16 11:28:41
【问题描述】:

我通过创建对象从 Form 类中获取值。它工作正常。但我想使用静态方法。我尝试但没有成功。

public function display()
{
    $newform=new Form();

    echo "<pre>";
    var_dump($newform->getAll());

    var_dump($newform->get('name'));
}

<?php 

class Form
{
    private $value = array();

    function __construct() {
        // here you can use some validation or escapes 
        foreach($_POST as $key=>$value)
            $this->value[$key] = $value;

    }

    public function getAll() {
        return $this->value;
    }

    public function get($value) {
        $this->value = $_POST[$value];

        return $this->value;
    }

}

【问题讨论】:

  • 静态方法由static关键字定义,public static function foo()

标签: php oop static


【解决方案1】:

也许您应该尝试阅读PHP documentation about static keyword

例子:

class Form {

    private static $value = array();

    public static function factory() {
        // here you can use some validation or escapes 
        foreach($_POST as $key => $value) {
            static::$value[$key] = $value;
        }
    }

    public static function getAll() {
        return static::$value;
    }

    public static function get($key) {
        return static::$value[$key];
    }

}

用途:

public function display() {
    Form::factory();

    echo "<pre>";
    var_dump(Form::getAll());
    var_dump(Form::get('name'));
    echo "</pre>";
}

【讨论】:

    【解决方案2】:

    您没有在类之外将函数声明为 public/private/protected

    你想静态调用这个方法,你可以试试

    <?php
         function display()
    {
        $newform=new Form($_POST);
    
        echo "<pre>";
        var_dump(Form::getAll());
    
        var_dump(Form::get('name'));
    }
    
    class Form
    {
    private static $value = array();
    function __construct(){
    // here you can use some validation or escapes 
    function __constract($array){
        foreach($array as $key=>$value)
            self::$value[$key] = $value;
    
        }
    }
    public static function getAll(){
    
        return self::$value;
    }
    public static function get($value){
    
            self::$value = self::$value[$value];
    
        return self::$value;
    }
    
    }
    

    【讨论】:

      【解决方案3】:

      这是getAll 方法的示例。对于get 方法同样的想法:

      public function display()
      {
          var_dump(Form::getAll());
      }
      
      class Form
      {
          private static $value = array();
         public static function initPost()
          {
              foreach($_POST as $key=>$value)
              self::$value[$key] = $value;
          }
          public static function getAll()
          {
              return self::$value;
          } 
      }
      

      【讨论】:

      • 它只是给我一个空字符串@sergio
      • 因为您没有创建Form 类的对象,并且__constructor 没有调用,并且$_POST 没有设置为$value 变量。
      • 为什么我在调用静态方法时要创建Form类的对象?请您修改您的答案。
      • @Navid Anjum。已编辑。但是您需要调用 Form::initPost() 将 POST darta 设置为数组。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-07
      相关资源
      最近更新 更多