Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
| 1 | <?php  | 
            ||
| 6 | class RootURLController extends Controller { | 
            ||
| 7 | |||
| 8 | /**  | 
            ||
| 9 | * @var bool  | 
            ||
| 10 | */  | 
            ||
| 11 | protected static $is_at_root = false;  | 
            ||
| 12 | |||
| 13 | /**  | 
            ||
| 14 | * @config  | 
            ||
| 15 | * @var string  | 
            ||
| 16 | */  | 
            ||
| 17 | private static $default_homepage_link = 'home';  | 
            ||
| 18 | |||
| 19 | /**  | 
            ||
| 20 | * @var string  | 
            ||
| 21 | */  | 
            ||
| 22 | protected static $cached_homepage_link;  | 
            ||
| 23 | |||
| 24 | /**  | 
            ||
| 25 | * Get the full form (e.g. /home/) relative link to the home page for the current HTTP_HOST value. Note that the  | 
            ||
| 26 | * link is trimmed of leading and trailing slashes before returning to ensure consistency.  | 
            ||
| 27 | *  | 
            ||
| 28 | * @return string  | 
            ||
| 29 | */  | 
            ||
| 30 | 	static public function get_homepage_link() { | 
            ||
| 31 | 		if(!self::$cached_homepage_link) { | 
            ||
| 32 | // @todo Move to 'homepagefordomain' module  | 
            ||
| 33 | 			if(class_exists('HomepageForDomainExtension')) { | 
            ||
| 34 | 				$host       = str_replace('www.', null, $_SERVER['HTTP_HOST']); | 
            ||
| 35 | $candidates = SiteTree::get()->where(array(  | 
            ||
| 36 | '"SiteTree"."HomepageForDomain" LIKE ?' => "%$host%"  | 
            ||
| 37 | ));  | 
            ||
| 38 | 				if($candidates) foreach($candidates as $candidate) { | 
            ||
| 39 | 					if(preg_match('/(,|^) *' . preg_quote($host) . ' *(,|$)/', $candidate->HomepageForDomain)) { | 
            ||
| 40 | self::$cached_homepage_link = trim($candidate->RelativeLink(true), '/');  | 
            ||
| 41 | }  | 
            ||
| 42 | }  | 
            ||
| 43 | }  | 
            ||
| 44 | |||
| 45 | 			if(!self::$cached_homepage_link) { | 
            ||
| 46 | // TODO Move to 'translatable' module  | 
            ||
| 47 | if (  | 
            ||
| 48 | 					class_exists('Translatable') | 
            ||
| 49 | 					&& SiteTree::has_extension('Translatable') | 
            ||
| 50 | && $link = Translatable::get_homepage_link_by_locale(Translatable::get_current_locale())  | 
            ||
| 51 | 				) { | 
            ||
| 52 | self::$cached_homepage_link = $link;  | 
            ||
| 53 | 				} else { | 
            ||
| 54 | 					self::$cached_homepage_link = Config::inst()->get('RootURLController', 'default_homepage_link'); | 
            ||
| 55 | }  | 
            ||
| 56 | }  | 
            ||
| 57 | }  | 
            ||
| 58 | |||
| 59 | return self::$cached_homepage_link;  | 
            ||
| 60 | }  | 
            ||
| 61 | |||
| 62 | /**  | 
            ||
| 63 | * Set the URL Segment used for your homepage when it is created by dev/build.  | 
            ||
| 64 | * This allows you to use home page URLs other than the default "home".  | 
            ||
| 65 | *  | 
            ||
| 66 | * @deprecated 4.0 Use the "RootURLController.default_homepage_link" config setting instead  | 
            ||
| 67 | * @param string $urlsegment the URL segment for your home page  | 
            ||
| 68 | */  | 
            ||
| 69 | 	static public function set_default_homepage_link($urlsegment = "home") { | 
            ||
| 73 | |||
| 74 | /**  | 
            ||
| 75 | * Gets the link that denotes the homepage if there is not one explicitly defined for this HTTP_HOST value.  | 
            ||
| 76 | *  | 
            ||
| 77 | * @deprecated 4.0 Use the "RootURLController.default_homepage_link" config setting instead  | 
            ||
| 78 | * @return string  | 
            ||
| 79 | */  | 
            ||
| 80 | 	static public function get_default_homepage_link() { | 
            ||
| 84 | |||
| 85 | /**  | 
            ||
| 86 | * Returns TRUE if a request to a certain page should be redirected to the site root (i.e. if the page acts as the  | 
            ||
| 87 | * home page).  | 
            ||
| 88 | *  | 
            ||
| 89 | * @param SiteTree $page  | 
            ||
| 90 | * @return bool  | 
            ||
| 91 | */  | 
            ||
| 92 | 	static public function should_be_on_root(SiteTree $page) { | 
            ||
| 93 | 		if(!self::$is_at_root && self::get_homepage_link() == trim($page->RelativeLink(true), '/')) { | 
            ||
| 
                                                                                                    
                        
                         | 
                |||
| 94 | return !(  | 
            ||
| 95 | 				class_exists('Translatable') && $page->hasExtension('Translatable') && $page->Locale && $page->Locale != Translatable::default_locale() | 
            ||
| 96 | );  | 
            ||
| 97 | }  | 
            ||
| 98 | |||
| 99 | return false;  | 
            ||
| 100 | }  | 
            ||
| 101 | |||
| 102 | /**  | 
            ||
| 103 | * Resets the cached homepage link value - useful for testing.  | 
            ||
| 104 | */  | 
            ||
| 105 | 	static public function reset() { | 
            ||
| 108 | |||
| 109 | View Code Duplication | 	protected function beforeHandleRequest(SS_HTTPRequest $request, DataModel $model) { | 
            |
| 110 | parent::beforeHandleRequest($request, $model);  | 
            ||
| 124 | |||
| 125 | /**  | 
            ||
| 126 | * @param SS_HTTPRequest $request  | 
            ||
| 127 | * @param DataModel|null $model  | 
            ||
| 128 | * @return SS_HTTPResponse  | 
            ||
| 129 | */  | 
            ||
| 130 | 	public function handleRequest(SS_HTTPRequest $request, DataModel $model = null) { | 
            ||
| 153 | |||
| 154 | }  | 
            ||
| 155 | 
It seems like the type of the argument is not accepted by the function/method which you are calling.
In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.
We suggest to add an explicit type cast like in the following example: