Completed
Push — master ( c81f6c...1650a0 )
by mw
07:33
created

formats/tree/TreeNode.php (1 issue)

Check for use of a trait as a return type hint.

Bug Comprehensibility Minor

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace SRF\Formats\Tree;
4
5
use Cdb\Exception;
6
use Tree\Node\Node;
7
use Tree\Node\NodeInterface;
8
use Tree\Node\NodeTrait;
9
10
class TreeNode extends Node {
11
12
	/**
13
	 * SRFTreeElement constructor.
14
	 *
15
	 * @param \SMWResultArray[] | null $row
16
	 */
17 5
	public function __construct( $row = null ) {
18 5
		parent::__construct( $row );
19 5
	}
20
21
	/**
22
	 * @return string
23
	 */
24 5
	public function getHash() {
25
26 5
		$resultSubject = $this->getResultSubject();
27
28 5
		if ( $resultSubject !== null ) {
29 5
			return $resultSubject->getSerialization();
30
		}
31
32 5
		return '';
33
	}
34
35
	/**
36
	 * @return null|\SMWDIWikiPage
37
	 */
38 5
	public function getResultSubject() {
39
		/** @var \SMWResultArray[] | null $row */
40 5
		$row = $this->getValue();
41
42 5
		if ( $row !== null ) {
43 5
			return $row[0]->getResultSubject();
44
		}
45
46 5
		return null;
47
	}
48
49
	/**
50
	 * @param NodeInterface $child
51
	 *
52
	 * @return NodeTrait
0 ignored issues
show
Comprehensibility Bug introduced by
The return type NodeTrait is a trait, and thus cannot be used for type-hinting in PHP. Maybe consider adding an interface and use that for type-hinting?

In PHP traits cannot be used for type-hinting as they do not define a well-defined structure. This is because any class that uses a trait can rename that trait’s methods.

If you would like to return an object that has a guaranteed set of methods, you could create a companion interface that lists these methods explicitly.

Loading history...
53
	 * @throws Exception
54
	 */
55 5
	public function addChild( NodeInterface $child ) {
56
57 5
		foreach ( $this->getAncestorsAndSelf() as $ancestor ) {
58 5
			if ( $ancestor->getHash() === $child->getHash() ) {
59 5
				throw new Exception( 'srf-tree-circledetected' );
60
			}
61
		}
62
63 5
		return parent::addChild( $child );
64
	}
65
66
}
67
68