These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | /** |
||
4 | * Query format for arrays with features for Extensions 'Arrays' and 'HashTables' |
||
5 | * |
||
6 | * @file |
||
7 | * @ingroup SemanticResultFormats |
||
8 | * @author Daniel Werner < [email protected] > |
||
9 | * |
||
10 | * Doesn't require 'Arrays' nor 'HashTables' exytensions but has additional features |
||
11 | * ('name' parameter in either result format) if they are available. |
||
12 | * |
||
13 | * Arrays 2.0+ and HashTables 1.0+ are recommended but not necessary. |
||
14 | */ |
||
15 | class SRFHash extends SRFArray { |
||
16 | |||
17 | protected $mLastPageTitle; |
||
18 | |||
19 | protected function deliverPageTitle( $value, $link = false ) { |
||
20 | $this->mLastPageTitle = $this->deliverSingleValue( $value, $link ); //remember the page title |
||
21 | return null; //don't add page title into property list |
||
22 | } |
||
23 | |||
24 | protected function deliverPageProperties( $perProperty_items ) { |
||
25 | if ( count( $perProperty_items ) < 1 ) { |
||
26 | return null; |
||
27 | } |
||
28 | return [ $this->mLastPageTitle, implode( $this->mPropSep, $perProperty_items ) ]; |
||
0 ignored issues
–
show
|
|||
29 | } |
||
30 | |||
31 | protected function deliverQueryResultPages( $perPage_items ) { |
||
32 | $hash = []; |
||
33 | foreach ( $perPage_items as $page ) { |
||
34 | $hash[$page[0]] = $page[1]; //name of page as key, Properties as value |
||
35 | } |
||
36 | return parent::deliverQueryResultPages( $hash ); |
||
37 | } |
||
38 | |||
39 | protected function createArray( $hash ) { |
||
40 | global $wgHashTables; |
||
41 | |||
42 | $hashId = $this->mArrayName; |
||
43 | $version = null; |
||
44 | if ( defined( 'ExtHashTables::VERSION' ) ) { |
||
45 | $version = ExtHashTables::VERSION; |
||
46 | } |
||
47 | if ( $version !== null && version_compare( $version, '0.999', '>=' ) ) { |
||
48 | // Version 1.0+, doesn't use $wgHashTables anymore |
||
49 | global $wgParser; |
||
50 | /** ToDo: is there a way to get the actual parser which has started the query? */ |
||
51 | ExtHashTables::get( $wgParser )->createHash( $hashId, $hash ); |
||
52 | } elseif ( !isset( $wgHashTables ) ) { |
||
53 | // Hash extension is not installed in this wiki |
||
54 | return false; |
||
55 | } elseif ( $version !== null && version_compare( $version, '0.6', '>=' ) ) { |
||
56 | // HashTables 0.6 to 1.0 |
||
57 | $wgHashTables->createHash( $hashId, $hash ); |
||
58 | } else { |
||
59 | // old HashTables, dirty way |
||
60 | $wgHashTables->mHashTables[trim( $hashId )] = $hash; |
||
61 | } |
||
62 | return true; |
||
63 | } |
||
64 | |||
65 | protected function handleParameters( array $params, $outputmode ) { |
||
66 | parent::handleParameters( $params, $outputmode ); |
||
67 | $this->mShowPageTitles = true; |
||
68 | } |
||
69 | |||
70 | /** |
||
71 | * @see SMWResultPrinter::getParamDefinitions |
||
72 | * |
||
73 | * @since 1.8 |
||
74 | * |
||
75 | * @param IParamDefinition[] $definitions |
||
76 | * |
||
77 | * @return array of IParamDefinition|array |
||
78 | */ |
||
79 | public function getParamDefinitions( array $definitions ) { |
||
80 | $params = parent::getParamDefinitions( $definitions ); |
||
81 | |||
82 | unset( $params['pagetitle'] ); // page title is Hash key, otherwise, just use Array format! |
||
83 | $params['name']['message'] = 'srf_paramdesc_hashname'; |
||
84 | |||
85 | return $params; |
||
86 | } |
||
87 | |||
88 | } |
||
89 |
If you return a value from a function or method, it should be a sub-type of the type that is given by the parent type f.e. an interface, or abstract method. This is more formally defined by the Lizkov substitution principle, and guarantees that classes that depend on the parent type can use any instance of a child type interchangably. This principle also belongs to the SOLID principles for object oriented design.
Let’s take a look at an example:
Our function
my_function
expects aPost
object, and outputs the author of the post. The base classPost
returns a simple string and outputting a simple string will work just fine. However, the child classBlogPost
which is a sub-type ofPost
instead decided to return anobject
, and is therefore violating the SOLID principles. If aBlogPost
were passed tomy_function
, PHP would not complain, but ultimately fail when executing thestrtoupper
call in its body.