Я пытаюсь запустить демонстрацию со страницы Neo4j - reco4php на Эта ссылка Я очень внимательно следил за каждым шагом, но в конце получаю странную ошибку.
позвольте мне объяснить более подробно:
Это код, который я пытаюсь запустить:
require 'vendor/autoload.php';
use GraphAware\Common\Cypher\Statement;
use GraphAware\Common\Type\Node;
use GraphAware\Reco4PHP\Context\Context;
use GraphAware\Reco4PHP\Engine\SingleDiscoveryEngine;
class RatedByOthers extends SingleDiscoveryEngine
{
public function discoveryQuery(Node $input, Context $context)
{
$query = 'MATCH (input:User) WHERE id(input) = {id}
MATCH (input)-[:RATED]->(m)<-[:RATED]-(o)
WITH distinct o
MATCH (o)-[:RATED]->(reco)
RETURN distinct reco LIMIT 500';
return Statement::create($query, ['id' => $input->identity()]);
}
public function name()
{
return "rated_by_others";
}
}
Этот код выше расширяет класс "SingleDiscoveryEngine":
declare (strict_types = 1);
namespace GraphAware\Reco4PHP\Engine;
use GraphAware\Common\Result\Record;
use GraphAware\Common\Result\ResultCollection;
use GraphAware\Common\Type\Node;
use GraphAware\Reco4PHP\Context\Context;
use GraphAware\Reco4PHP\Result\Recommendations;
use GraphAware\Reco4PHP\Result\SingleScore;
abstract class SingleDiscoveryEngine implements DiscoveryEngine
{
private static $DEFAULT_RECO_NAME = 'reco';
private static $DEFAULT_SCORE_NAME = 'score';
private static $DEFAULT_REASON_NAME = 'reason';
public function buildScore(Node $input, Node $item, Record $record, Context
$context) : SingleScore
{
$score = $record->hasValue($this->scoreResultName()) ? $record- >value($this->scoreResultName()) : $this->defaultScore();
$reason = $record->hasValue($this->reasonResultName()) ? $record- >value($this->reasonResultName()) : null;
return new SingleScore($score, $reason);
}
final public function produceRecommendations(Node $input, ResultCollection
$resultCollection, Context $context) : Recommendations
{
$result = $resultCollection->get($this->name());
$recommendations = new Recommendations($context);
foreach ($result->records() as $record) {
if ($record->hasValue($this->recoResultName())) {
$recommendations->add($record->get($this->recoResultName()), $this->name(), $this->buildScore($input, $record->get($this->recoResultName()),
$record, $context));
}
}
return $recommendations;
}
/**
* {@inheritdoc}
*/
public function recoResultName() : string
{
return self::$DEFAULT_RECO_NAME;
}
/**
* {@inheritdoc}
*/
public function scoreResultName() : string
{
return self::$DEFAULT_SCORE_NAME;
}
/**
* {@inheritdoc}
*/
public function reasonResultName() : string
{
return self::$DEFAULT_REASON_NAME;
}
/**
* {@inheritdoc}
*/
public function defaultScore() : float
{
return 1.0;
}
}
и вышеприведенный класс также реализует следующий класс:
namespace GraphAware\Reco4PHP\Engine;
use GraphAware\Common\Cypher\StatementInterface;
use GraphAware\Common\Result\Record;
use GraphAware\Common\Type\Node;
use GraphAware\Common\Result\ResultCollection;
use GraphAware\Reco4PHP\Context\Context;
use GraphAware\Reco4PHP\Result\Recommendations;
use GraphAware\Reco4PHP\Result\SingleScore;
interface DiscoveryEngine
{
/**
* @return string The name of the discovery engine
*/
public function name() : string;
/**
* The statement to be executed for finding items to be recommended.
*
* @param Node $input
* @param Context $context
*
* @return \GraphAware\Common\Cypher\Statement
*/
public function discoveryQuery(Node $input, Context $context) : StatementInterface;
/**
* Returns the score produced by the recommended item.
*
* @param Node $input
* @param Node $item
* @param Record $record
* @param Context $context
*
* @return \GraphAware\Reco4PHP\Result\SingleScore A single score produced for the recommended item
*/
public function buildScore(Node $input, Node $item, Record $record, Context $context) : SingleScore;
/**
* Returns a collection of Recommendation object produced by this discovery engine.
*
* @param Node $input
* @param ResultCollection $resultCollection
* @param Context $context
*
* @return Recommendations
*/
public function produceRecommendations(Node $input, ResultCollection $resultCollection, Context $context) : Recommendations;
/**
* @return string The column identifier of the row result representing the recommended item (node)
*/
public function recoResultName() : string;
/**
* @return string The column identifier of the row result representing the score to be used, note that this
* is not mandatory to have a score in the result. If empty, the score will be the float value returned by
* <code>defaultScore()</code> or the score logic if the concrete class override the <code>buildScore</code>
* method.
*/
public function scoreResultName() : string;
/**
* @return float The default score to be given to the discovered recommended item
*/
public function defaultScore() : float;
}
И когда я запускаю код, я получаю следующую ошибку:
Неустранимая ошибка: объявление RatedByOthers :: name () должно быть совместимо с GraphAware \ Reco4PHP \ Engine \ DiscoveryEngine :: name (): строка в /Applications/XAMPP/xamppfiles/htdocs/reco/index.php в строке 9
Я проверил код в течение нескольких часов, и я думаю, что он должен работать нормально, и я понятия не имею, откуда возникает проблема.