小编Iva*_* T.的帖子

如何在 PHP 中的子类继承方法中定义更严格的类型?

假设我有这样的三门课。

abstract class A {
   abstract protected function doSomething($object): array;
}

class B extends A {
   protected function doSomething(SomeObject $object): array
   {
       // something
   }
}

class C extends A {
   protected function doSomething(OtherObject $object): array
   {
       // something
   }
}
Run Code Online (Sandbox Code Playgroud)

根据 PHP 的继承原理,上述结构不是合法的 PHP 代码,因为方法定义与基类不兼容。我当然可以做类似的事情

class B extends A {
    protected function doSomething($object): array
    {
        if (!is_a($object, 'SomeObject')) {
            throw new Exception('Object passed to method is not of the correct class for this method.');
        }

        // something
    }
} …
Run Code Online (Sandbox Code Playgroud)

php oop liskov-substitution-principle solid-principles

5
推荐指数
1
解决办法
1354
查看次数

是否可以使用较少的代码从值列中为 PHP 中的数组元素分配键?

假设我有一个元素数组,它们本身就是数组,如下所示:

$array = [
    ['foo' => 'ABC', 'bar' => 'DEF'],
    ['foo' => 'ABB', 'bar' => 'DDD'],
    ['foo' => 'BAC', 'bar' => 'EFF'],
];
Run Code Online (Sandbox Code Playgroud)

要将foo字段的值设置为数组的键,我可以这样做:

foreach ($array as $element) {
    $new_array[$element['foo']] = $element;
}
$array = $new_array;
Run Code Online (Sandbox Code Playgroud)

代码自然是微不足道的,但我一直想知道是否有内置的可以为我做同样的事情。

php arrays multidimensional-array

4
推荐指数
1
解决办法
932
查看次数

未定义行为的说明,以及是否确实未定义

我已经为5个元素的数组动态分配了内存,然后尝试将其元素打印到std::cout,这应该给我带来相当简单的结果。相反,我得到了其他东西,这给我带来了一些问题。

我的代码:

#include <iostream>

int main()
{
    int *array = new int[5];

    int array_size = sizeof(array);
    for (int index = 0; index < array_size; index++) {
        std::cout << array[index] << "\n";
    }
    std::cout << "\nThe array is " << array_size << " elements long.";

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这就是结果:

0
0
0
0
0
0
132049
0
Run Code Online (Sandbox Code Playgroud)

现在,我知道这不是事情的完成方式,但是这样的结果使我有几个问题。

  1. 为什么数组的大小是8,而不是5?本来我以2的幂为单位来表示记忆,但我有一种错的感觉。
  2. 132049是什么?

c++ arrays

2
推荐指数
1
解决办法
101
查看次数

为Laravel模型属性使用不同的列名

我有一个Laravel模型,它有一个foo属性.但是,在数据库中,我要传入的值foo存储在bar列中.有没有办法在不改变数据库结构的情况下做到这一点?它由我正在整合项目的第三方所拥有,而我实际上无法控制他们的数据库结构.

我已经设法使用$connection和建立与所述数据库的连接$table,但映射属性仍然是一个问题.

php laravel

0
推荐指数
1
解决办法
542
查看次数