Ik was even aan het kijken hoe PHP 7 werkt op het huidige systeem wat ik aan het schrijven en alles werkt behalve dat ik een strict error krijg in mijn database classe.
Ik maak gebruik van een classe die PDO extend, en hang hieraan een custom PDOStatement class.
<?php
class Statement extends PDOStatement{
public function execute(...$args){
parent::execute();
}
}
class Database extends PDO{}
?>
De foutmelding hierop is:
Warning: Declaration of Statement::execute(...$args) should be compatible with PDOStatement::execute($bound_input_params = NULL) in /path/to/statement.php on line 90
Hoewel ik de foutmelding begrijp, en de error heb weggewerkt met:
<?php
public function execute($a = null, ...$args){
array_unshift($args, $a);
$i = 0;
foreach($args as $var){
if(is_array($var)){
foreach($var as $key => $val){
if(preg_match('/(.*)(:.*)/', $key, $matches)){
$this->bindValue($matches[2], $val, empty($matches[1]) ? PDO::PARAM_STR : $this->getParam($matches[1][0]));
} else {
throw new DatabaseException("Unsupported array index, expected a :named parameter.", self::EX_PARAM_MISMATCH);
}
}
} else {
$this->bindValue($i+1, $args[$i++]);
}
}
$this->dbh->rsl = parent::execute();
$this->dbh->sth = $this;
return $this;
}
?>
Deze fix is natuurlijk niet echt netjes, maar ik begrijp niet echt waar deze melding vandaan komt en of dit misschien wel eens een bug zou kunnen zijn aangezien het lijn nummer ook niet klopt.
Hoewel het probleem uiteindelijk door de functie naam komt, wilde ik hier alleen een andere gebruik methode aan vast makken zodat je in de code niet de hele tijd met array's hoeft te werken.
In PHP 6 had ik hier geen problemen aan, en strict error reporting stond ook aan.
Dit probleem had ik volgens mij niet in PHP 7 RC1 (draai nu op RC2).
3.032 views