Table::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 14
Code Lines 9

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 14
rs 9.4285
cc 1
eloc 9
nc 1
nop 1
1
<?php
2
3
namespace RDV\Bundle\MigrationBundle\Migration\Schema;
4
5
use Doctrine\DBAL\Schema\Table as BaseTable;
6
use Doctrine\DBAL\Schema\Column as BaseColumn;
7
8
/**
9
 * The aim of this class is to provide a way extend doctrine Column class
10
 * To do this just define your column class name in COLUMN_CLASS constant in an extended class
11
 * and override createColumnObject if your column class constructor need an additional arguments
12
 */
13
class Table extends BaseTable
14
{
15
    /**
16
     * Used column class, define COLUMN_CLASS constant in an extended class to extend the column class
17
     * Important: your class must extend RDV\Bundle\MigrationBundle\Migration\Schema\Column class
18
     *            or extend Doctrine\DBAL\Schema\Column class and must have __construct(array $args) method
19
     */
20
    const COLUMN_CLASS = 'Doctrine\DBAL\Schema\Column';
21
22
    /**
23
     * Creates an instance of COLUMN_CLASS class
24
     *
25
     * @param array $args An arguments for COLUMN_CLASS class constructor
26
     *                    An instance of a base column is in 'column' element
27
     * @return BaseColumn
28
     */
29
    protected function createColumnObject(array $args)
30
    {
31
        $columnClass = static::COLUMN_CLASS;
32
33
        return new $columnClass($args);
34
    }
35
36
    /**
37
     * Constructor
38
     *
39
     * @param array $args
40
     */
41
    public function __construct(array $args)
42
    {
43
        /** @var BaseTable $baseTable */
44
        $baseTable = $args['table'];
45
46
        parent::__construct(
47
            $baseTable->getName(),
48
            $baseTable->getColumns(),
49
            $baseTable->getIndexes(),
50
            $baseTable->getForeignKeys(),
51
            false,
0 ignored issues
show
Documentation introduced by
false is of type boolean, but the function expects a integer.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
52
            $baseTable->getOptions()
53
        );
54
    }
55
56
    /**
57
     * {@inheritdoc}
58
     */
59
    public function addColumn($columnName, $typeName, array $options = [])
60
    {
61
        parent::addColumn($columnName, $typeName, $options);
62
63
        return $this->getColumn($columnName);
64
    }
65
66
    /**
67
     * {@inheritdoc}
68
     */
69
    // @codingStandardsIgnoreStart
70
    protected function _addColumn(BaseColumn $column)
71
    {
72
        if (get_class($column) !== static::COLUMN_CLASS && static::COLUMN_CLASS !== 'Doctrine\DBAL\Schema\Column') {
73
            $column = $this->createColumnObject(['column' => $column]);
74
        }
75
        parent::_addColumn($column);
76
    }
77
    // @codingStandardsIgnoreEnd
78
}
79