Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yii2
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PSDI Army
yii2
Commits
2272c97f
Commit
2272c97f
authored
Nov 12, 2011
by
Qiang Xue
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
...
parent
b947d688
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
42 additions
and
23 deletions
+42
-23
code_style.md
docs/code_style.md
+4
-0
review_2011_11_12_alex.md
docs/review_2011_11_12_alex.md
+35
-19
YiiBase.php
framework/YiiBase.php
+2
-3
Behavior.php
framework/base/Behavior.php
+1
-1
No files found.
docs/code_style.md
View file @
2272c97f
...
@@ -29,6 +29,10 @@ class MyClass
...
@@ -29,6 +29,10 @@ class MyClass
Use brackets even for one line
`if`
s.
Use brackets even for one line
`if`
s.
> I chose to use the style as shown in Component.php because I want to make the
> curly brackets consistent with array brackets regarding newlines. Similar coding
> style is also used in Symfony 2.
### Use type hinting like
### Use type hinting like
~~~
~~~
...
...
docs/review_2011_11_12_alex.md
View file @
2272c97f
...
@@ -7,23 +7,22 @@ Overall hierarchy
...
@@ -7,23 +7,22 @@ Overall hierarchy
Generally is OK. Like that
`Object`
and
`Component`
are now separated.
Generally is OK. Like that
`Object`
and
`Component`
are now separated.
I've generated 2 diagrams under
`docs/`
to see it better as a whole.
I've generated 2 diagrams under
`docs/`
to see it better as a whole.
> The purpose of separating `Object` from `Component` is to make `Object`
> a super-light base class that supports properties defined by getter/setters.
> Note that `Component` is a bit of heavy because it uses two extra member
> variables to support events and behaviors.
Object
Object
------
------
### property feature
### property feature
Why returning anything when setting a value?
~~~
if (method_exists($this, $setter)) {
// ???
return $this->$setter($value);
}
~~~
Is it OK that
`canGetProperty`
and
`canSetProperty`
will return
`false`
for real
Is it OK that
`canGetProperty`
and
`canSetProperty`
will return
`false`
for real
class members?
class members?
> Added $checkVar parameter
### callbacks and expressions
### callbacks and expressions
We're using 5.3. What's the reason to support
`eval()`
in
`evaluateExpression`
if
We're using 5.3. What's the reason to support
`eval()`
in
`evaluateExpression`
if
...
@@ -33,6 +32,9 @@ If we're going to get rid of `eval()`, cosider remaning method to something abou
...
@@ -33,6 +32,9 @@ If we're going to get rid of `eval()`, cosider remaning method to something abou
If not then we definitely need to use anonymous functions in API docs and the guide
If not then we definitely need to use anonymous functions in API docs and the guide
where possible.
where possible.
> The purpose of evaluateExpression() is to provide a way of evaluating a PHP expression
> in the context of an object. Will remove it before release if we find no use of it.
### Object::create()
### Object::create()
#### `__construct` issue
#### `__construct` issue
...
@@ -41,6 +43,8 @@ Often a class doesn't have `__construct` implementation and `stdClass` doesn't h
...
@@ -41,6 +43,8 @@ Often a class doesn't have `__construct` implementation and `stdClass` doesn't h
default one either but Object::create() always expects constructor to be
default one either but Object::create() always expects constructor to be
defined. See
`ObjectTest`
. Either
`method_exists`
call or
`Object::__construct`
needed.
defined. See
`ObjectTest`
. Either
`method_exists`
call or
`Object::__construct`
needed.
> Added Object::__construct.
#### How to support object factory like we do with CWidgetFactory?
#### How to support object factory like we do with CWidgetFactory?
~~~
~~~
...
@@ -80,6 +84,10 @@ class Object
...
@@ -80,6 +84,10 @@ class Object
This way we'll be able to set defaults for any object.
This way we'll be able to set defaults for any object.
> The key issue here is about how to process the config file. Clearly, we cannot
> do this for every type of component because it would mean an extra file access
> for every component type
#### Do we need to support lazy class injection?
#### Do we need to support lazy class injection?
Currently there's no way to lazy-inject class into another class property via
Currently there's no way to lazy-inject class into another class property via
...
@@ -111,41 +119,45 @@ echo $foo->bar->prop;
...
@@ -111,41 +119,45 @@ echo $foo->bar->prop;
Should it support infinite nesting level?
Should it support infinite nesting level?
> I don't think we need this. Foo::$prop cannot be an object unless it needs it to be.
> In that case, it can be defined with a setter in which it can handle the object creation
> based on a configuration array. This is a bit inconvenient, but I think such usage is
> not very common.
### Why `Event` is `Object`?
### Why `Event` is `Object`?
There's no need to extend from
`Object`
. Is there a plan to use
`Object`
features
There's no need to extend from
`Object`
. Is there a plan to use
`Object`
features
later?
later?
Initable
> To use properties defined via getter/setter.
--------
Interface itself looks OK. Its usage is OK too.
`Initable::preinit`
mentioned in
`Yii::create()`
docs but neither defined in
the interface nor called in the code.
Behaviors
Behaviors
---------
---------
Overall I wasn't able to use behaviors. See
`BehaviorTest`
.
Overall I wasn't able to use behaviors. See
`BehaviorTest`
.
### Wrong API docs at Behavior
Docs mention properties and events but not methods.
### Should behaviors be able to define events for owner components?
### Should behaviors be able to define events for owner components?
Why not? Should be a very good feature in order to make behaviors customizable.
Why not? Should be a very good feature in order to make behaviors customizable.
> It's a bit hard to implement it efficiently. I tend not to support it for now
> unless enough people are requesting for it.
### Multiple behaviors can be attached to the same component
### Multiple behaviors can be attached to the same component
What if we'll have multiple methods / properties / events with the same name?
What if we'll have multiple methods / properties / events with the same name?
> The first one takes precedence. This is the same as we do in 1.1.
### How to use Behavior::attach?
### How to use Behavior::attach?
Looks like it is used by
`Component::attachBehavior`
but can't be used without it.
Looks like it is used by
`Component::attachBehavior`
but can't be used without it.
Why it's public then? Can we move it to
`Component?`
Why it's public then? Can we move it to
`Component?`
> It's public because it is called by Component. It is in Behavior such that
> it can be overridden by behavior classes to customize the attach process.
Events
Events
------
------
...
@@ -165,6 +177,10 @@ Exceptions
...
@@ -165,6 +177,10 @@ Exceptions
-
Should we convert all errors, warnings and notices to exceptions?
-
Should we convert all errors, warnings and notices to exceptions?
> I think not. We used to do this in early versions of 1.0. We found sometimes
> very mysterious things would happen which makes error fixing harder rather than
> easier.
Coding style
Coding style
------------
------------
...
...
framework/YiiBase.php
View file @
2272c97f
...
@@ -302,9 +302,8 @@ class YiiBase
...
@@ -302,9 +302,8 @@ class YiiBase
* passed to the constructor of the object being created.
* passed to the constructor of the object being created.
*
*
* If a component class implements the [[\yii\base\Initable]] interface,
* If a component class implements the [[\yii\base\Initable]] interface,
* its [[\yii\base\Initable::preinit|preinit]] and [[\yii\base\Initable::init|init]]
* its [[\yii\base\Initable::init|init]] method will be invoked AFTER
* methods will be invoked BEFORE and AFTER the component properties are initialized,
* the component properties are initialized.
* respectively.
*
*
* @param mixed $config the configuration. It can be either a string or an array.
* @param mixed $config the configuration. It can be either a string or an array.
* @return mixed the created object
* @return mixed the created object
...
...
framework/base/Behavior.php
View file @
2272c97f
...
@@ -13,7 +13,7 @@ namespace yii\base;
...
@@ -13,7 +13,7 @@ namespace yii\base;
* Behavior is the base class for all behavior classes.
* Behavior is the base class for all behavior classes.
*
*
* A behavior can be used to enhance the functionality of an existing component.
* A behavior can be used to enhance the functionality of an existing component.
* In particular, it can "inject" its own
properties and event
s into the component
* In particular, it can "inject" its own
methods and propertie
s into the component
* and make them directly accessible via the component.
* and make them directly accessible via the component.
*
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @author Qiang Xue <qiang.xue@gmail.com>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment