Использование instanceof для проверки и изменения ввода

я использую instanceof проверять экземпляры класса и хотеть изменить входные данные, если класс уже имеет экземпляр с такими же данными. Пример ниже демонстрирует мою проблему в деталях, где у меня есть два уникальных ввода массива, а третий — дублирующий массив второго, где instanceof должен работать и изменять ввод.

/**
* Foo Class
*/
class Foo {
public $bar = array();
public function __construct() {}

public function add( $bar ) {
if ( $bar['ID'] instanceof Baz ) { // inctanceof not working as i am expecting. supposed to modify duplicate occurrence

//if bar['ID'] is already instance of Baz then we are trying to modify bar ID before pass it so Baz.
$bar['ID'] = $bar['ID'] . rand();
$this->bar[ $bar['ID'] ] = new Baz( $bar );
}
else {
$this->bar[ $bar['ID'] ] = new Baz( $bar );
}
}
}

Класс Баз

/**
* Class Baz
*/
class Baz {
public $ID;
public function __construct( $bar ) {
$this->ID = $bar['ID'];
}
}

Пример

$foo = new Foo();

$bar = array( 'ID'  => 'bar1' );
$foo->add( $bar );

$bar2 = array( 'ID'  => 'bar2' );
$foo->add( $bar2 );

$bar3 = array( 'ID'  => 'bar2' ); //duplicate ID
$foo->add( $bar3 );

Распечатать

print_r( $foo );

Выход

Foo Object
(
[bar] => Array
(
[bar1] => Baz Object
(
[ID] => bar1
)

[bar2] => Baz Object
(
[ID] => bar2
)

)

)

Ожидаемый результат

Foo Object
(
[bar] => Array
(
[bar1] => Baz Object
(
[ID] => bar1
)

[bar2] => Baz Object
(
[ID] => bar2
)
[bar2{random number}] => Baz Object
(
[ID] => bar2{random number}
)

)

)

что я здесь не так делаю? пожалуйста, направьте меня и альтернативное решение также применимо.

0

Решение

Ваш класс Foo должен выглядеть так:

class Foo {
public $bar = array();
public function __construct() {}

public function add( $bar ) {
if (isset($this->bar[ $bar['ID'] ]) && $this->bar[ $bar['ID'] ] instanceof Baz ) { // inctanceof not working as i am expecting. supposed to modify duplicate occurrence

//if bar['ID'] is already instance of Baz then we are trying to modify bar ID before pass it so Baz.
$bar['ID'] = $bar['ID'] . rand();
$this->bar[$bar['ID']]= new Baz( $bar );
}
else {
$this->bar[ $bar['ID'] ] = new Baz( $bar );
}
}
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]