在php中不使用对象实例化调用类方法(使用构造函数)

在php中不使用对象实例化调用类方法(使用构造函数),php,class,constructor,methods,instantiation,Php,Class,Constructor,Methods,Instantiation,我看了又试,但找不到答案 在PHP中,是否可以调用类的成员函数(当该类需要构造函数来接收参数时),而不将其实例化为对象 代码示例(给出错误): 如果没有实例,就不能调用实例级方法。您的语法: 没什么意义。您正在创建一个内联实例并立即丢弃它,或者alert()方法没有隐式此实例 假设: class Test { public function __construct($message) { $this->message = $message; } public func

我看了又试,但找不到答案

在PHP中,是否可以调用类的成员函数(当该类需要构造函数来接收参数时),而不将其实例化为对象

代码示例(给出错误):


如果没有实例,就不能调用实例级方法。您的语法:

没什么意义。您正在创建一个内联实例并立即丢弃它,或者
alert()
方法没有隐式
实例

假设:

class Test {
  public function __construct($message) {
    $this->message = $message;
  }

  public function foo($message) {
    echo "$this->message $message";
  }
}
你可以做:

$t = new Test("Hello");
$t->foo("world");
但是PHP语法不允许:

new Test("Hello")->foo("world");

否则,这将是等效的。在PHP中有几个这样的例子(例如对函数返回使用数组索引)。这就是它的方式。

不幸的是,PHP不支持这样做,但您是一个有创造力和外观的家伙:D

您可以使用“工厂”,示例:


我也在寻找一个单行程序来实现这一点,作为将日期从一种格式转换为另一种格式的单个表达式的一部分。我喜欢在一行代码中执行此操作,因为这是一个单一的逻辑操作。因此,这有点神秘,但它允许您在一行中实例化和使用日期对象:

$newDateString = ($d = new DateTime('2011-08-30') ? $d->format('F d, Y') : '');
将日期字符串从一种格式转换为另一种格式的另一种方法是使用帮助函数来管理代码的OO部分:

function convertDate($oldDateString,$newDateFormatString) {
    $d = new DateTime($oldDateString);
    return $d->format($newDateFormatString);
}

$myNewDate = convertDate($myOldDate,'F d, Y');
我认为面向对象的方法是很酷和必要的,但它有时会很乏味,需要太多的步骤来完成简单的操作。

只要这样做(在PHP>=5.4中):


我想回声测试::_构造(“世界”)::警报(“你好”);可能会工作,但不会,对静态函数发出警报()将完成此任务。我正在创建一个内联实例并立即丢弃它。我不明白为什么我需要为这个过程分配一个变量。。。这就是PHP/OOP的方式吗?我想这行不通。因为您不能在不创建任何对象的情况下引用$this。
<?php

class Foo
{
   private $__aaa = null;

   public function __construct($aaa)
   {
      $this->__aaa = $aaa;
   }

   public static function factory($aaa)
   {
      return new Foo($aaa);
   }

   public function doX()
   {
      return $this->__aaa * 2;
   }
}

Foo::factory(10)->doX();   // outputs 20
$newDateString = ($d = new DateTime('2011-08-30') ? $d->format('F d, Y') : '');
function convertDate($oldDateString,$newDateFormatString) {
    $d = new DateTime($oldDateString);
    return $d->format($newDateFormatString);
}

$myNewDate = convertDate($myOldDate,'F d, Y');
$t = (new Test("Hello"))->foo("world");