Intereting Posts
Пользовательский рендеринг Zend Попытка получить свойство не-объекта в PDO PHP. Может ли кто-нибудь объяснить функцию pfsockopen для меня? (постоянный сокет) Как вырезать результаты из пользовательского запроса в Laravel Как решить медленную отправку почты в CodeIgniter? Как я могу получить имя изображения из URL-адреса? Расширение Microsoft sqlsrv для php 5.5.x Как эхо «…» после номера 9 и повторять последние два числа после «…» для разбивки на страницы? Неустранимая ошибка: класс «CModelEvent» не найден в CModel.php в строке 189 Сортировка MySQL-запроса с помощью ORDER BY или с помощью функций сортировки PHP Каков наилучший способ взглянуть на экземпляр (объект) класса PHP, чтобы увидеть все доступные ему публичные свойства и методы? Нужны ли кавычки вокруг таблиц и столбцов в запросе MySQL? Создание анимированного gif с использованием библиотеки GD Показывать результаты, пока скрипт все еще выполняется. Laravel: Ошибка : не удалось найти драйвер в MySQL

Неустранимая ошибка: Декларация .. должна быть совместима с .. PHP

Я получаю следующую ошибку:

Fatal error: Declaration of Shoppingcart::addToCart() must be compatible with that of Ishoppingcart::addToCart() in klassen.php on line 118 

В чем может быть проблема? Я не могу найти скрипт:

 <?php // begin interface Ishoppingcart{ public function addToCart(); public function printOverzicht(); } abstract class Shoppingcart implements Ishoppingcart { protected $producten = array(); public function addToCart( Product $product) { $this->producten[] = $product; } } class Myshoppingcart extends Shoppingcart { public function printOverzicht(){ echo ("<table border=1> <tr> <td colspan='7'>Bestellingoverzicht</td> </tr> <tr> <td bgcolor=#cccccc> Product ID</td> <td bgcolor=#cccccc> Beschrijving</td> <td bgcolor=#cccccc> Merk</td> <td bgcolor=#cccccc> Model</td> <td bgcolor=#cccccc> Prijs</td> <td bgcolor=#cccccc> Aantal</td> <td bgcolor=#cccccc> Korting</td> </tr>"); foreach($this->producten as $product){ $rij = ""; $rij .= "<tr>"; $rij .= "<td>".$product->getID()."</td>"; $rij .= "<td>".$product->getBeschrijving()."</td>"; $rij .= "<td>".$product->getMerk()."</td>"; $rij .= "<td>".$product->getModel()."</td>"; $rij .= "<td>".$product->getPrijs()."</td>"; $rij .= "<td>".$product->getAantal()."</td>"; $rij .= "<td>".$product->getKorting()."</td>"; $rij .= "</tr>"; echo ($rij); } echo ("</table>"); } } class Product { private $id; private $beschrijving; private $merk; private $model; private $prijs; private $aantal; private $korting; function __construct($id, $merk, $model, $prijs, $aantal, $korting){ $this->id = $id; $this->beschrijving = $beschrijving; $this->merk = $merk; $this->model = $model; $this->prijs = $prijs; $this->aantal = $aantal; $this->korting = $korting; echo ("<br />Nieuw Product object $beschrijving wordt aangemaakt"); } public function __destruct(){ // voer benodigde acties uit echo ("<br />Product object $this->beschrijving wordt verwijderd"); } // set function public function setId($id){ $this->id = $id; } public function setBeschrijving($beschrijving){ $this->beschrijving = $beschrijving; } public function setMerk($merk){ $this->merk = $merk; } public function setModel($model){ $this->model = $model; } public function setPrijs($prijs){ $this->prijs = $prijs; } public function setAantal($aantal){ $this->aantal = $aantal; } public function setKorting($korting){ $this->korting = $korting; } // get function public function getId(){ return $this->id = $id; } public function getBeschrijving(){ return $this->beschrijving; } public function getMerk(){ return $this->merk; } public function getModel(){ return $this->model; } public function getPrijs(){ return $this->prijs; } public function getAantal(){ return $this->aantal; } public function getKorting(){ return $this->korting; } // printProductInfo public function printProductInfo(){ $rij = "<tr><td>$this->id</td>"; $rij .= "<td>$this->beschrijving</td>"; $rij .= "<td>$this->merk</td>"; $rij .= "<td>$this->model</td>"; $rij .= "<td>$this->prijs</td>"; $rij .= "<td>$this->aantal</td>"; $rij .= "<td>$this->korting</td>"; echo ($rij); } } // einde ?> 

Ishoppingcart::addToCart() указывает, что метод не принимает никакого параметра, тогда как для реализации Shoppingcart::addToCart(Product $product) требуется, чтобы в метод был передан параметр типа Product . Это означает, что обе декларации несовместимы, и, хотя реализованный интерфейс должен быть удовлетворен, PHP выдает указанную ошибку.

Решение заключалось бы в том, чтобы либо изменить Ishoppingcart::addToCart() на Ishoppingcart::addToCart(Product $product) чтобы он требовал параметра типа Product либо для изменения Shoppingcart::addToCart(Product $product) чтобы не пропускать параметр метод: Shoppingcart::addToCart(Product $product = null) ;

Правильный способ зависит от ваших требований приложения.

Объявление публичной функции в подклассе должно соответствовать объявлению его родителя:

 public function addToCart(); public function addToCart( Product $product) 

Вы не можете добавить параметр в подпись.

Это тесно связано с принципом замещения Лискова .

Интерфейс Ishoppingcart, по-видимому, определяет addToShoppingCart без параметров, но класс Shoppingcart определяет ту же функцию, что и Продукт в качестве параметра. Я полагаю, что метод в интерфейсе также должен воспринимать Продукт как параметр.