This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php defined('SYSPATH') OR die('No direct script access.'); |
||
2 | /** |
||
3 | * Jam Model |
||
4 | * |
||
5 | * Jam_Model is the class all models must extend. It handles |
||
6 | * various CRUD operations and relationships to other models. |
||
7 | * |
||
8 | * @package Jam |
||
9 | * @category Models |
||
10 | * @author Ivan Kerin |
||
11 | * @copyright (c) 2011-2012 Despark Ltd. |
||
12 | * @license http://www.opensource.org/licenses/isc-license.txt |
||
13 | */ |
||
14 | abstract class Kohana_Jam_Validated extends Model implements Serializable { |
||
15 | |||
16 | /** |
||
17 | * @var array The original data set on the object |
||
18 | */ |
||
19 | protected $_original = array(); |
||
20 | |||
21 | /** |
||
22 | * @var array Data that's changed since the object was loaded |
||
23 | */ |
||
24 | protected $_changed = array(); |
||
25 | |||
26 | /** |
||
27 | * @var array Data that's already been retrieved is cached |
||
28 | */ |
||
29 | protected $_retrieved = array(); |
||
30 | |||
31 | /** |
||
32 | * @var array Unmapped data that is still accessible |
||
33 | */ |
||
34 | protected $_unmapped = array(); |
||
35 | |||
36 | /** |
||
37 | * @var boolean Whether or not the model is validating |
||
38 | */ |
||
39 | protected $_is_validating = FALSE; |
||
40 | |||
41 | /** |
||
42 | * @var Jam_Meta A copy of this object's meta object |
||
43 | */ |
||
44 | protected $_meta = NULL; |
||
45 | |||
46 | /** |
||
47 | * @var Boolean A flag that keeps track of whether or not the model is valid |
||
48 | */ |
||
49 | protected $_errors = NULL; |
||
50 | |||
51 | /** |
||
52 | * Constructor. |
||
53 | * |
||
54 | * A key can be passed to automatically load a model by its |
||
55 | * unique key. |
||
56 | * |
||
57 | * @param mixed|null $key |
||
0 ignored issues
–
show
|
|||
58 | */ |
||
59 | 441 | public function __construct($meta_name = NULL) |
|
60 | { |
||
61 | 441 | if ($meta_name === NULL) |
|
62 | { |
||
63 | 436 | $meta_name = $this; |
|
64 | } |
||
65 | |||
66 | // Load the object's meta data for quick access |
||
67 | 441 | $this->_meta = Jam::meta($meta_name); |
|
68 | |||
69 | 441 | $this->_original = $this->meta()->defaults(); |
|
0 ignored issues
–
show
It seems like
$this->meta()->defaults() of type * is incompatible with the declared type array of property $_original .
Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property. Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property.. ![]() |
|||
70 | 441 | } |
|
71 | |||
72 | /** |
||
73 | * Gets the value of a field. |
||
74 | * |
||
75 | * Unlike Jam_Model::get(), values that are returned are cached |
||
76 | * until they are changed and relationships are automatically select()ed. |
||
77 | * |
||
78 | * @see get() |
||
79 | * @param string $name The name or alias of the field you're retrieving |
||
80 | * @return mixed |
||
81 | */ |
||
82 | 146 | public function &__get($name) |
|
83 | { |
||
84 | 146 | if ( ! array_key_exists($name, $this->_retrieved)) |
|
85 | { |
||
86 | 144 | $this->_retrieved[$name] = $this->get($name); |
|
87 | } |
||
88 | |||
89 | 146 | return $this->_retrieved[$name]; |
|
90 | } |
||
91 | |||
92 | /** |
||
93 | * Sets the value of a field. |
||
94 | * |
||
95 | * @see set() |
||
96 | * @param string $name The name of the field you're setting |
||
97 | * @param mixed $value The value you're setting |
||
98 | * @return void |
||
99 | */ |
||
100 | 76 | public function __set($name, $value) |
|
101 | { |
||
102 | // Being set by mysql_fetch_object, store the values for the constructor |
||
103 | 76 | if (empty($this->_original)) |
|
104 | { |
||
105 | $this->_preload_data[$name] = $value; |
||
0 ignored issues
–
show
The property
_preload_data does not exist on object<Kohana_Jam_Validated> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
106 | return; |
||
107 | } |
||
108 | |||
109 | 76 | $this->set($name, $value); |
|
110 | 76 | } |
|
111 | |||
112 | /** |
||
113 | * Passes unknown methods along to the behaviors. |
||
114 | * |
||
115 | * @param string $method |
||
116 | * @param array $args |
||
117 | * @return mixed |
||
118 | **/ |
||
119 | 34 | public function __call($method, $args) |
|
120 | { |
||
121 | 34 | return $this->meta()->events()->trigger_callback('model', $this, $method, $args); |
|
122 | } |
||
123 | |||
124 | /** |
||
125 | * Returns true if $name is a field of the model or an unmapped column. |
||
126 | * |
||
127 | * This does not conform to the standard of returning FALSE if the |
||
128 | * property is set but the value is NULL. Rather this acts more like |
||
129 | * property_exists. |
||
130 | * |
||
131 | * @param string $name |
||
132 | * @return boolean |
||
133 | */ |
||
134 | public function __isset($name) |
||
135 | { |
||
136 | return (bool) ($this->meta()->field($name) OR array_key_exists($name, $this->_unmapped)); |
||
137 | } |
||
138 | |||
139 | /** |
||
140 | * This doesn't unset fields. Rather, it sets them to their original |
||
141 | * value. Unmapped, changed, and retrieved values are unset. |
||
142 | * |
||
143 | * In essence, unsetting a field sets it as if you never made any changes |
||
144 | * to it, and clears the cache if the value has been retrieved with those changes. |
||
145 | * |
||
146 | * @param string $name |
||
147 | * @return void |
||
148 | */ |
||
149 | public function __unset($name) |
||
150 | { |
||
151 | unset($this->_changed[$name]); |
||
152 | unset($this->_retrieved[$name]); |
||
153 | |||
154 | // We can safely delete this no matter what |
||
155 | unset($this->_unmapped[$name]); |
||
156 | } |
||
157 | |||
158 | /** |
||
159 | * Returns a string representation of the model in the |
||
160 | * form of `Model_Name (id)` or `Model_Name (NULL)` if |
||
161 | * the model is not loaded. |
||
162 | * |
||
163 | * This is designed to be useful for debugging. |
||
164 | * |
||
165 | * @return string |
||
166 | */ |
||
167 | public function __toString() |
||
168 | { |
||
169 | return (string) get_class($this).'('.($this->is_valid() ? 'Valid' : 'Not Valid').')'; |
||
170 | } |
||
171 | |||
172 | /** |
||
173 | * Gets the value for a field. |
||
174 | * |
||
175 | * @param string $name The field's name |
||
176 | * @return array|mixed |
||
177 | */ |
||
178 | 215 | public function get($name) |
|
179 | { |
||
180 | 215 | if ($field = $this->_meta->field($name)) |
|
181 | { |
||
182 | // Alias the name to its actual name |
||
183 | 204 | $name = $field->name; |
|
184 | |||
185 | 204 | if (array_key_exists($name, $this->_changed)) |
|
186 | { |
||
187 | 44 | return $field->get($this, $this->_changed[$name], TRUE); |
|
0 ignored issues
–
show
$this of type object<Kohana_Jam_Validated> is not a sub-type of object<Jam_Validated> . It seems like you assume a child class of the class Kohana_Jam_Validated to be always present.
This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass. Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type. ![]() The method
get does only exist in Jam_Field , but not in Kohana_Jam_Meta .
It seems like the method you are trying to call exists only in some of the possible types. Let’s take a look at an example: class A
{
public function foo() { }
}
class B extends A
{
public function bar() { }
}
/**
* @param A|B $x
*/
function someFunction($x)
{
$x->foo(); // This call is fine as the method exists in A and B.
$x->bar(); // This method only exists in B and might cause an error.
}
Available Fixes
![]() |
|||
188 | } |
||
189 | else |
||
190 | { |
||
191 | 204 | return $this->original($name); |
|
192 | } |
||
193 | } |
||
194 | // Return unmapped data from custom queries |
||
195 | 25 | elseif ($this->unmapped($name)) |
|
196 | { |
||
197 | 23 | return $this->_unmapped[$name]; |
|
198 | } |
||
199 | 10 | } |
|
200 | |||
201 | /** |
||
202 | * Returns the original value of a field, before it was changed. |
||
203 | * |
||
204 | * This method—combined with get(), which first searches for changed |
||
205 | * values—is useful for comparing changes that occurred on a model. |
||
206 | * |
||
207 | * @param string $field The field's or alias name |
||
0 ignored issues
–
show
There is no parameter named
$field . Was it maybe removed?
This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function. Consider the following example. The parameter /**
* @param array $germany
* @param array $island
* @param array $italy
*/
function finale($germany, $island) {
return "2:1";
}
The most likely cause is that the parameter was removed, but the annotation was not. ![]() |
|||
208 | * @return mixed |
||
209 | */ |
||
210 | 207 | public function original($field_name = NULL) |
|
211 | { |
||
212 | 207 | if ($field_name === NULL) |
|
213 | return $this->_original; |
||
214 | |||
215 | 207 | if ($field = $this->_meta->field($field_name)) |
|
216 | { |
||
217 | 207 | return $field->get($this, $this->_original[$field_name], FALSE); |
|
0 ignored issues
–
show
$this of type object<Kohana_Jam_Validated> is not a sub-type of object<Jam_Validated> . It seems like you assume a child class of the class Kohana_Jam_Validated to be always present.
This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass. Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type. ![]() The method
get does only exist in Jam_Field , but not in Kohana_Jam_Meta .
It seems like the method you are trying to call exists only in some of the possible types. Let’s take a look at an example: class A
{
public function foo() { }
}
class B extends A
{
public function bar() { }
}
/**
* @param A|B $x
*/
function someFunction($x)
{
$x->foo(); // This call is fine as the method exists in A and B.
$x->bar(); // This method only exists in B and might cause an error.
}
Available Fixes
![]() |
|||
218 | } |
||
219 | } |
||
220 | |||
221 | /** |
||
222 | * Returns an array of values in the fields. |
||
223 | * |
||
224 | * You can pass an array of field names to retrieve |
||
225 | * only the values for those fields: |
||
226 | * |
||
227 | * $model->as_array(array('id', 'name', 'status')); |
||
228 | * |
||
229 | * @param array $fields |
||
230 | * @return array |
||
231 | */ |
||
232 | 10 | public function as_array(array $fields = NULL) |
|
233 | { |
||
234 | 10 | $fields = $fields ? $fields : array_keys($this->_meta->fields()); |
|
235 | 10 | $result = array(); |
|
236 | |||
237 | 10 | foreach ($fields as $field) |
|
238 | { |
||
239 | 10 | $result[$field] = $this->__get($field); |
|
240 | } |
||
241 | |||
242 | 10 | return $result; |
|
243 | } |
||
244 | |||
245 | /** |
||
246 | * Set preloaded values, without changing the save, loaded and changed flags |
||
247 | * @param array|string $values |
||
248 | * @param mixed $value |
||
249 | * @return $this |
||
250 | */ |
||
251 | 12 | public function retrieved($values, $value = NULL) |
|
252 | { |
||
253 | // Accept retrieved('name', 'value'); |
||
254 | 12 | if ( ! is_array($values)) |
|
255 | { |
||
256 | 12 | $values = array($values => $value); |
|
257 | } |
||
258 | |||
259 | 12 | $this->_retrieved = Arr::merge($this->_retrieved, $values); |
|
260 | |||
261 | 12 | return $this; |
|
262 | } |
||
263 | /** |
||
264 | * Sets the value of a field. |
||
265 | * |
||
266 | * You can pass an array of key => value pairs |
||
267 | * to set multiple fields at the same time: |
||
268 | * |
||
269 | * $model->set(array( |
||
270 | * 'field1' => 'value', |
||
271 | * 'field2' => 'value', |
||
272 | * .... |
||
273 | * )); |
||
274 | * |
||
275 | * @param array|string $values |
||
276 | * @param mixed|null $value |
||
277 | * @return $this |
||
278 | */ |
||
279 | 93 | public function set($values, $value = NULL) |
|
280 | { |
||
281 | // Accept set('name', 'value'); |
||
282 | 93 | if ( ! is_array($values)) |
|
283 | { |
||
284 | $values = array($values => $value); |
||
285 | } |
||
286 | |||
287 | 93 | foreach ($values as $key => & $value) |
|
288 | { |
||
289 | 91 | if ($field = $this->meta()->field($key)) |
|
290 | { |
||
291 | 78 | $converted_field_value = $field->set($this, $value, TRUE); |
|
0 ignored issues
–
show
$this of type object<Kohana_Jam_Validated> is not a sub-type of object<Jam_Validated> . It seems like you assume a child class of the class Kohana_Jam_Validated to be always present.
This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass. Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type. ![]() The call to
Kohana_Jam_Meta::set() has too many arguments starting with TRUE .
This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue. If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. In this case you can add the ![]() |
|||
292 | 78 | if ($converted_field_value !== $this->{$field->name}) |
|
293 | { |
||
294 | 56 | $this->_changed[$field->name] = $converted_field_value; |
|
295 | |||
296 | 56 | if (array_key_exists($field->name, $this->_retrieved)) |
|
297 | { |
||
298 | 78 | unset($this->_retrieved[$field->name]); |
|
299 | } |
||
300 | } |
||
301 | } |
||
302 | 34 | elseif (property_exists($this, $key)) |
|
303 | { |
||
304 | 1 | $this->$key = $value; |
|
305 | } |
||
306 | else |
||
307 | { |
||
308 | 34 | unset($this->_retrieved[$key]); |
|
309 | 91 | $this->_unmapped[$key] = $value; |
|
310 | } |
||
311 | } |
||
312 | |||
313 | 93 | return $this; |
|
314 | } |
||
315 | |||
316 | 19 | public function is_valid() |
|
317 | { |
||
318 | 19 | return count($this->errors()) == 0; |
|
319 | } |
||
320 | |||
321 | /** |
||
322 | * Validates the current model's data |
||
323 | * |
||
324 | * @throws Jam_Exception_Validation |
||
325 | * @param Validation|null $extra_validation |
||
0 ignored issues
–
show
There is no parameter named
$extra_validation . Was it maybe removed?
This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function. Consider the following example. The parameter /**
* @param array $germany
* @param array $island
* @param array $italy
*/
function finale($germany, $island) {
return "2:1";
}
The most likely cause is that the parameter was removed, but the annotation was not. ![]() |
|||
326 | * @return bool |
||
327 | */ |
||
328 | 19 | public function check($force = FALSE) |
|
329 | { |
||
330 | 19 | $this->_is_validating = TRUE; |
|
331 | // Run validation only when new or changed |
||
332 | 19 | if ($this->changed() OR $force) |
|
333 | { |
||
334 | // Reset the errors before checking |
||
335 | 19 | $this->_errors = FALSE; |
|
336 | |||
337 | 19 | $this->meta()->events()->trigger('model.before_check', $this, array($this->_changed)); |
|
338 | |||
339 | 19 | $this->meta()->execute_validators($this, $force); |
|
0 ignored issues
–
show
$this of type object<Kohana_Jam_Validated> is not a sub-type of object<Jam_Validated> . It seems like you assume a child class of the class Kohana_Jam_Validated to be always present.
This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass. Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type. ![]() |
|||
340 | |||
341 | 19 | $this->meta()->events()->trigger('model.after_check', $this, array($this->_changed)); |
|
342 | } |
||
343 | |||
344 | 19 | $this->_is_validating = FALSE; |
|
345 | |||
346 | 19 | return $this->is_valid(); |
|
347 | } |
||
348 | |||
349 | /** |
||
350 | * @return $this |
||
351 | * @throws Jam_Exception_Validation |
||
352 | * |
||
353 | * @deprecated Since 0.5.24 Use try-catch around save() instead. This might be removed in future version. |
||
354 | */ |
||
355 | 1 | public function check_insist() |
|
356 | { |
||
357 | 1 | @trigger_error('check_insist() is deprecated and might be removed in future version.', E_USER_DEPRECATED); |
|
0 ignored issues
–
show
It seems like you do not handle an error condition here. This can introduce security issues, and is generally not recommended.
If you suppress an error, we recommend checking for the error condition explicitly: // For example instead of
@mkdir($dir);
// Better use
if (@mkdir($dir) === false) {
throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
![]() |
|||
358 | |||
359 | 1 | if ( ! $this->check()) |
|
360 | 1 | throw new Jam_Exception_Validation('There was an error validating the :model: :errors', $this); |
|
361 | |||
362 | return $this; |
||
363 | } |
||
364 | |||
365 | /** |
||
366 | * Override this function to add custom validation after the validators. |
||
367 | * Having an empty validate function allow safely calling parent::validate() |
||
368 | * when extending models. |
||
369 | * |
||
370 | * You need to set errors with: |
||
371 | * $this->errors()->add('field', 'error_name'); |
||
372 | * |
||
373 | * @link http://git.io/5I47Tw docs |
||
374 | */ |
||
375 | public function validate() {} |
||
376 | |||
377 | /** |
||
378 | * Get the errors from the previous check, if you provide a name, will return the errors only for that name |
||
379 | * Automatically loads the error messages file from messages/jam-validation/<model_name> |
||
380 | * If there are no errors yet - return NULL |
||
381 | * |
||
382 | * @param string $name the name of the field to get errors of |
||
383 | * @return Jam_Errors|string[]|NULL |
||
384 | */ |
||
385 | 202 | public function errors($name = NULL) |
|
386 | { |
||
387 | 202 | if ( ! $this->_errors) |
|
388 | { |
||
389 | 202 | $this->_errors = new Jam_Errors($this, $this->meta()->errors_filename()); |
|
0 ignored issues
–
show
$this of type object<Kohana_Jam_Validated> is not a sub-type of object<Jam_Validated> . It seems like you assume a child class of the class Kohana_Jam_Validated to be always present.
This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass. Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type. ![]() It seems like
new \Jam_Errors($this, $...a()->errors_filename()) of type object<Jam_Errors> is incompatible with the declared type boolean of property $_errors .
Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property. Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property.. ![]() |
|||
390 | } |
||
391 | |||
392 | 202 | if ($name !== NULL) |
|
393 | 1 | return $this->_errors->messages($name); |
|
394 | |||
395 | 201 | return $this->_errors; |
|
0 ignored issues
–
show
|
|||
396 | } |
||
397 | |||
398 | /** |
||
399 | * Removes any changes made to a model. |
||
400 | * |
||
401 | * This method only works on loaded models. |
||
402 | * |
||
403 | * @return $this |
||
404 | */ |
||
405 | public function revert() |
||
406 | { |
||
407 | $this->_errors = NULL; |
||
408 | |||
409 | $this->_changed = |
||
410 | $this->_retrieved = array(); |
||
411 | |||
412 | return $this; |
||
413 | } |
||
414 | |||
415 | /** |
||
416 | * Sets a model to its original state, as if freshly instantiated |
||
417 | * |
||
418 | * @return $this |
||
419 | */ |
||
420 | 196 | public function clear() |
|
421 | { |
||
422 | 196 | $this->_errors = NULL; |
|
423 | |||
424 | 196 | $this->_changed = |
|
425 | 196 | $this->_retrieved = |
|
426 | 196 | $this->_unmapped = array(); |
|
427 | |||
428 | 196 | $this->_original = $this->_meta->defaults(); |
|
0 ignored issues
–
show
It seems like
$this->_meta->defaults() of type * is incompatible with the declared type array of property $_original .
Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property. Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property.. ![]() |
|||
429 | |||
430 | 196 | return $this; |
|
431 | } |
||
432 | |||
433 | /** |
||
434 | * Whether or not the model is in the process of being validated |
||
435 | * |
||
436 | * @return boolean |
||
437 | */ |
||
438 | 7 | public function is_validating() |
|
439 | { |
||
440 | 7 | return ($this->_is_validating OR $this->_is_saving); |
|
0 ignored issues
–
show
The property
_is_saving does not exist on object<Kohana_Jam_Validated> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
441 | } |
||
442 | |||
443 | /** |
||
444 | * Returns whether or not the particular $field has changed. |
||
445 | * |
||
446 | * If $field is NULL, the method returns whether or not any |
||
447 | * data whatsoever was changed on the model. |
||
448 | * |
||
449 | * @param string $field |
||
0 ignored issues
–
show
There is no parameter named
$field . Was it maybe removed?
This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function. Consider the following example. The parameter /**
* @param array $germany
* @param array $island
* @param array $italy
*/
function finale($germany, $island) {
return "2:1";
}
The most likely cause is that the parameter was removed, but the annotation was not. ![]() |
|||
450 | * @return boolean |
||
451 | */ |
||
452 | 58 | public function changed($name = NULL) |
|
453 | { |
||
454 | 58 | if ($name) |
|
455 | { |
||
456 | 39 | return array_key_exists($name, $this->_changed); |
|
457 | } |
||
458 | else |
||
459 | { |
||
460 | 46 | return (bool) $this->_changed; |
|
461 | } |
||
462 | } |
||
463 | |||
464 | /** |
||
465 | * Returns the value of the model's primary key |
||
466 | * |
||
467 | * @return mixed |
||
468 | */ |
||
469 | 146 | public function id() |
|
470 | { |
||
471 | 146 | return $this->get($this->meta()->primary_key()); |
|
0 ignored issues
–
show
It seems like
$this->meta()->primary_key() targeting Kohana_Jam_Meta::primary_key() can also be of type object<Jam_Meta> ; however, Kohana_Jam_Validated::get() does only seem to accept string , maybe add an additional type check?
This check looks at variables that are passed out again to other methods. If the outgoing method call has stricter type requirements than the method itself, an issue is raised. An additional type check may prevent trouble. ![]() |
|||
472 | } |
||
473 | |||
474 | /** |
||
475 | * Returns the value of the model's name key |
||
476 | * |
||
477 | * @return string |
||
478 | */ |
||
479 | 17 | public function name() |
|
480 | { |
||
481 | 17 | return $this->get($this->meta()->name_key()); |
|
0 ignored issues
–
show
It seems like
$this->meta()->name_key() targeting Kohana_Jam_Meta::name_key() can also be of type object<Jam_Meta> ; however, Kohana_Jam_Validated::get() does only seem to accept string , maybe add an additional type check?
This check looks at variables that are passed out again to other methods. If the outgoing method call has stricter type requirements than the method itself, an issue is raised. An additional type check may prevent trouble. ![]() |
|||
482 | } |
||
483 | |||
484 | /** |
||
485 | * Returns the model's meta object |
||
486 | * |
||
487 | * @return Jam_Meta |
||
488 | */ |
||
489 | 754 | public function meta() |
|
490 | { |
||
491 | 754 | if ( ! $this->_meta) |
|
492 | throw new Kohana_Exception('Model for class :class does not have a meta', array(':class' => get_class($this))); |
||
493 | |||
494 | 754 | return $this->_meta; |
|
495 | } |
||
496 | |||
497 | 26 | public function unmapped($name) |
|
498 | { |
||
499 | 26 | return array_key_exists($name, $this->_unmapped); |
|
500 | } |
||
501 | |||
502 | |||
503 | public function serialize() |
||
504 | { |
||
505 | return serialize(array( |
||
506 | 'original' => $this->_original, |
||
507 | 'changed' => $this->_changed, |
||
508 | 'unmapped' => $this->_unmapped, |
||
509 | )); |
||
510 | } |
||
511 | |||
512 | public function unserialize($data) |
||
513 | { |
||
514 | $data = unserialize($data); |
||
515 | $this->_meta = Jam::meta($this); |
||
516 | $this->_original = $data['original']; |
||
517 | $this->_changed = $data['changed']; |
||
518 | $this->_unmapped = $data['unmapped']; |
||
519 | } |
||
520 | } |
||
521 |
This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.
Consider the following example. The parameter
$italy
is not defined by the methodfinale(...)
.The most likely cause is that the parameter was removed, but the annotation was not.