Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP类初始化 我对PHP(来自丰富的C++背景)很陌生。这是一个好的语言,但是我缺少了一些C++生物的舒适性,比如Struts。所以我决定做一些可以作为结构的东西。我得出了以下结论: class Struct { public string $Foo; public string $Bar; }_Php - Fatal编程技术网

PHP类初始化 我对PHP(来自丰富的C++背景)很陌生。这是一个好的语言,但是我缺少了一些C++生物的舒适性,比如Struts。所以我决定做一些可以作为结构的东西。我得出了以下结论: class Struct { public string $Foo; public string $Bar; }

PHP类初始化 我对PHP(来自丰富的C++背景)很陌生。这是一个好的语言,但是我缺少了一些C++生物的舒适性,比如Struts。所以我决定做一些可以作为结构的东西。我得出了以下结论: class Struct { public string $Foo; public string $Bar; },php,Php,在我看来这看起来很棒。现在,我希望能够像在C++中一样,就地初始化这些结构变量: Struct Structure{ "One", "Two" } 然而,据我所知,在PHP中实现这一点的唯一方法是创建自定义构造函数。不过,这样做的一个缺点是,您需要为创建的每个结构创建自定义构造函数。 我认为您可以通过使用继承来克服这个问题。但问题是:怎么做?我曾考虑在基类中创建一个构造函数,它可以以某种方式初始化派生类的变量,但我不完全确定我将如何去做(更不用说这是否是

在我看来这看起来很棒。现在,我希望能够像在C++中一样,就地初始化这些结构变量:

Struct Structure{ "One", "Two" }
然而,据我所知,在PHP中实现这一点的唯一方法是创建自定义构造函数。不过,这样做的一个缺点是,您需要为创建的每个结构创建自定义构造函数。 我认为您可以通过使用继承来克服这个问题。但问题是:怎么做?我曾考虑在基类中创建一个构造函数,它可以以某种方式初始化派生类的变量,但我不完全确定我将如何去做(更不用说这是否是一个“好”的解决方案)


任何帮助都将不胜感激

试着这样做。这可能对你有帮助

class Struct{
  public $foo;
  public $bar;
}

$obj = new MyStruct();
$obj->foo = 'One';
$obj->bar = 'Two';

试着这样做。这可能对你有帮助

class Struct{
  public $foo;
  public $bar;
}

$obj = new MyStruct();
$obj->foo = 'One';
$obj->bar = 'Two';

听起来你好像在找一艘客轮。一个没有类的对象和一种快速实例化它的方法

在PHP中执行此操作的规范方法可能不是对象,而是数组:

$foo = [
  'Foo' => 'One',
  'Bar' => 'Two'
];

听起来你好像在找一艘客轮。一个没有类的对象和一种快速实例化它的方法

在PHP中执行此操作的规范方法可能不是对象,而是数组:

$foo = [
  'Foo' => 'One',
  'Bar' => 'Two'
];

我将添加另一个解决方案,它可能满足您的需求,也可能不满足您的需求。你可以考虑其中的一个解决方案:

class Struct
{
  public string $Foo;
  public string $Bar;

  public static function fromAssoc(array $assoc): self
  {
      $instance = new self();
      $instance->Foo = $assoc['Foo'];
      $instance->Bar = $assoc['Bar'];
      return $instance;
  }

  public static function fromArray(array $array): self
  {
      $instance = new self();
      $instance->Foo = $assoc[0];
      $instance->Bar = $assoc[1];
      return $instance;
  }
}

$struct = Struct::fromAssoc([
  'Foo' => 'One',
  'Bar' => 'Two',
]);

$struct = Struct::fromArray(['One', 'Two']);

选择您最喜欢的

我将添加另一个解决方案,它可能满足您的需求,也可能不满足您的需求。你可以考虑其中的一个解决方案:

class Struct
{
  public string $Foo;
  public string $Bar;

  public static function fromAssoc(array $assoc): self
  {
      $instance = new self();
      $instance->Foo = $assoc['Foo'];
      $instance->Bar = $assoc['Bar'];
      return $instance;
  }

  public static function fromArray(array $array): self
  {
      $instance = new self();
      $instance->Foo = $assoc[0];
      $instance->Bar = $assoc[1];
      return $instance;
  }
}

$struct = Struct::fromAssoc([
  'Foo' => 'One',
  'Bar' => 'Two',
]);

$struct = Struct::fromArray(['One', 'Two']);

选择您最喜欢的

您可能应该等待PHP8.0(它现在处于测试阶段)。有一个新特性叫做构造函数提升(在PHP8.0中被接受和实现)。创建构造函数及其参数,同时定义类属性:

类结构
{
公共函数构造(
公共字符串$Foo,
公共字符串$Bar,
) {
}
}
< C++开发者的酷!现在,您可以轻松地实例化它:

$structure=新结构(“一”、“二”);

工作完美(用PHP8.0-beta2测试)

您可能应该等待PHP8.0(它现在处于测试阶段)。有一个新特性叫做构造函数提升(在PHP8.0中被接受和实现)。创建构造函数及其参数,同时定义类属性:

类结构
{
公共函数构造(
公共字符串$Foo,
公共字符串$Bar,
) {
}
}
< C++开发者的酷!现在,您可以轻松地实例化它:

$structure=新结构(“一”、“二”);

工作完美(用PHP8.0-beta2测试)

您可以使用类似于
$struct=(object)['Foo'=>'One','Bar'=>'Two']的内容创建一个具有属性的
stdclass
实例强大的PHP数据结构是。PHP数组是数组、双链表和hash/map/dictionary(不管您如何命名)的组合。最后一个功能通常用于模拟
结构(但该语言不提供任何帮助来防止为“字段”使用不正确的名称)。您可以创建一个
stdclass
实例,其属性类似于
$struct=(object)['Foo'=>one','Bar'=>Two']强大的PHP数据结构是。PHP数组是数组、双链表和hash/map/dictionary(不管您如何命名)的组合。最后一个功能通常用于模拟
结构
(但该语言不提供任何帮助来防止对“字段”使用错误的名称)。我考虑过这样做,然而,我不高兴看到它不能像前面提到的C++风格的括号初始化那样在一行中初始化它,但是我不喜欢它,因为我不能像前面提到的C++风格的括号初始化一样完美地初始化它。正是我要找的!完美,正是我想要的!如果不是因为据我所知,您无法将其划分为父类和派生类,这将是一个很好的解决方案。我这样做的原因是为了避免将相同的逻辑复制到我创建的每个结构中。如果不是因为据我所知,您无法将其划分为父类和派生类,这将是一个很好的解决方案。我这样做的原因是为了避免将相同的逻辑复制到我创建的每个结构中。