Commit 9d8c0968 by Qiang Xue

Merge pull request #714 from crtlib/patch-3

Another try for Component::hasProperty() optimization
parents a1d1b2fb 80f1fda7
...@@ -220,19 +220,19 @@ class Component extends Object ...@@ -220,19 +220,19 @@ class Component extends Object
* *
* - the class has a getter or setter method associated with the specified name * - the class has a getter or setter method associated with the specified name
* (in this case, property name is case-insensitive); * (in this case, property name is case-insensitive);
* - the class has a member variable with the specified name (when `$checkVar` is true); * - the class has a member variable with the specified name (when `$checkVars` is true);
* - an attached behavior has a property of the given name (when `$checkBehavior` is true). * - an attached behavior has a property of the given name (when `$checkBehaviors` is true).
* *
* @param string $name the property name * @param string $name the property name
* @param boolean $checkVar whether to treat member variables as properties * @param boolean $checkVars whether to treat member variables as properties
* @param boolean $checkBehavior whether to treat behaviors' properties as properties of this component * @param boolean $checkBehaviors whether to treat behaviors' properties as properties of this component
* @return boolean whether the property is defined * @return boolean whether the property is defined
* @see canGetProperty * @see canGetProperty
* @see canSetProperty * @see canSetProperty
*/ */
public function hasProperty($name, $checkVar = true, $checkBehavior = true) public function hasProperty($name, $checkVars = true, $checkBehaviors = true)
{ {
return $this->canGetProperty($name, $checkVar, $checkBehavior) || $this->canSetProperty($name, $checkVar, $checkBehavior); return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);
} }
/** /**
...@@ -241,23 +241,23 @@ class Component extends Object ...@@ -241,23 +241,23 @@ class Component extends Object
* *
* - the class has a getter method associated with the specified name * - the class has a getter method associated with the specified name
* (in this case, property name is case-insensitive); * (in this case, property name is case-insensitive);
* - the class has a member variable with the specified name (when `$checkVar` is true); * - the class has a member variable with the specified name (when `$checkVars` is true);
* - an attached behavior has a readable property of the given name (when `$checkBehavior` is true). * - an attached behavior has a readable property of the given name (when `$checkBehaviors` is true).
* *
* @param string $name the property name * @param string $name the property name
* @param boolean $checkVar whether to treat member variables as properties * @param boolean $checkVars whether to treat member variables as properties
* @param boolean $checkBehaviors whether to treat behaviors' properties as properties of this component * @param boolean $checkBehaviors whether to treat behaviors' properties as properties of this component
* @return boolean whether the property can be read * @return boolean whether the property can be read
* @see canSetProperty * @see canSetProperty
*/ */
public function canGetProperty($name, $checkVar = true, $checkBehaviors = true) public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
{ {
if (method_exists($this, 'get' . $name) || $checkVar && property_exists($this, $name)) { if (method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name)) {
return true; return true;
} elseif ($checkBehaviors) { } elseif ($checkBehaviors) {
$this->ensureBehaviors(); $this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) { foreach ($this->_behaviors as $behavior) {
if ($behavior->canGetProperty($name, $checkVar)) { if ($behavior->canGetProperty($name, $checkVars)) {
return true; return true;
} }
} }
...@@ -271,23 +271,23 @@ class Component extends Object ...@@ -271,23 +271,23 @@ class Component extends Object
* *
* - the class has a setter method associated with the specified name * - the class has a setter method associated with the specified name
* (in this case, property name is case-insensitive); * (in this case, property name is case-insensitive);
* - the class has a member variable with the specified name (when `$checkVar` is true); * - the class has a member variable with the specified name (when `$checkVars` is true);
* - an attached behavior has a writable property of the given name (when `$checkBehavior` is true). * - an attached behavior has a writable property of the given name (when `$checkBehaviors` is true).
* *
* @param string $name the property name * @param string $name the property name
* @param boolean $checkVar whether to treat member variables as properties * @param boolean $checkVars whether to treat member variables as properties
* @param boolean $checkBehaviors whether to treat behaviors' properties as properties of this component * @param boolean $checkBehaviors whether to treat behaviors' properties as properties of this component
* @return boolean whether the property can be written * @return boolean whether the property can be written
* @see canGetProperty * @see canGetProperty
*/ */
public function canSetProperty($name, $checkVar = true, $checkBehaviors = true) public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
{ {
if (method_exists($this, 'set' . $name) || $checkVar && property_exists($this, $name)) { if (method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name)) {
return true; return true;
} elseif ($checkBehaviors) { } elseif ($checkBehaviors) {
$this->ensureBehaviors(); $this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) { foreach ($this->_behaviors as $behavior) {
if ($behavior->canSetProperty($name, $checkVar)) { if ($behavior->canSetProperty($name, $checkVars)) {
return true; return true;
} }
} }
......
...@@ -170,17 +170,17 @@ class Object implements Arrayable ...@@ -170,17 +170,17 @@ class Object implements Arrayable
* *
* - the class has a getter or setter method associated with the specified name * - the class has a getter or setter method associated with the specified name
* (in this case, property name is case-insensitive); * (in this case, property name is case-insensitive);
* - the class has a member variable with the specified name (when `$checkVar` is true); * - the class has a member variable with the specified name (when `$checkVars` is true);
* *
* @param string $name the property name * @param string $name the property name
* @param boolean $checkVar whether to treat member variables as properties * @param boolean $checkVars whether to treat member variables as properties
* @return boolean whether the property is defined * @return boolean whether the property is defined
* @see canGetProperty * @see canGetProperty
* @see canSetProperty * @see canSetProperty
*/ */
public function hasProperty($name, $checkVar = true) public function hasProperty($name, $checkVars = true)
{ {
return $this->canGetProperty($name, $checkVar) || $this->canSetProperty($name, false); return $this->canGetProperty($name, $checkVars) || $this->canSetProperty($name, false);
} }
/** /**
...@@ -189,16 +189,16 @@ class Object implements Arrayable ...@@ -189,16 +189,16 @@ class Object implements Arrayable
* *
* - the class has a getter method associated with the specified name * - the class has a getter method associated with the specified name
* (in this case, property name is case-insensitive); * (in this case, property name is case-insensitive);
* - the class has a member variable with the specified name (when `$checkVar` is true); * - the class has a member variable with the specified name (when `$checkVars` is true);
* *
* @param string $name the property name * @param string $name the property name
* @param boolean $checkVar whether to treat member variables as properties * @param boolean $checkVars whether to treat member variables as properties
* @return boolean whether the property can be read * @return boolean whether the property can be read
* @see canSetProperty * @see canSetProperty
*/ */
public function canGetProperty($name, $checkVar = true) public function canGetProperty($name, $checkVars = true)
{ {
return method_exists($this, 'get' . $name) || $checkVar && property_exists($this, $name); return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
} }
/** /**
...@@ -207,16 +207,16 @@ class Object implements Arrayable ...@@ -207,16 +207,16 @@ class Object implements Arrayable
* *
* - the class has a setter method associated with the specified name * - the class has a setter method associated with the specified name
* (in this case, property name is case-insensitive); * (in this case, property name is case-insensitive);
* - the class has a member variable with the specified name (when `$checkVar` is true); * - the class has a member variable with the specified name (when `$checkVars` is true);
* *
* @param string $name the property name * @param string $name the property name
* @param boolean $checkVar whether to treat member variables as properties * @param boolean $checkVars whether to treat member variables as properties
* @return boolean whether the property can be written * @return boolean whether the property can be written
* @see canGetProperty * @see canGetProperty
*/ */
public function canSetProperty($name, $checkVar = true) public function canSetProperty($name, $checkVars = true)
{ {
return method_exists($this, 'set' . $name) || $checkVar && property_exists($this, $name); return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
} }
/** /**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment