Buenas,
he visto, de momento, que tanto como con Yii:app y $this puedo ejecutar los mismos métodos, y me pregunto que es más óptimo, pero no he sabido encontrar ninguna documentación sobre esto y veo que en muchos códigos se usa indistintamente, alguien me sabría explicar cual es mas óptimo para el uso en Yii?
Saludos y gracias.
Page 1 of 1
$This-> Vs Yii:app()->
#2
Posted 22 October 2012 - 01:09 PM
Hola Hiei,
La diferencia es grande
Los métodos llamados desde $this, normalmente son de ámbito local, mientras que los de Yii::app() son a nivel global de la aplicación.
Por poner un ejemplo, la función createUrl()
Para el caso de $this, la función asume que todas las URLs pertenecen al controlador, así que si hago un createUrl('index') y el controlador se llama "Cont", entonces se convierte en "index.php?r=/cont/index".
Pero en el caso de Yii::app(), se asume la aplicación como raíz, así que para la función se renderizaría como: "?r=/index"...
En otras palabras, en el primer caso, se asume que se está llamando una "action" del mismo "controller", pero el segundo caso, se asume que es un "controller".
Espero haber contestado la pregunta
La diferencia es grande
Los métodos llamados desde $this, normalmente son de ámbito local, mientras que los de Yii::app() son a nivel global de la aplicación.
Por poner un ejemplo, la función createUrl()
Para el caso de $this, la función asume que todas las URLs pertenecen al controlador, así que si hago un createUrl('index') y el controlador se llama "Cont", entonces se convierte en "index.php?r=/cont/index".
Pero en el caso de Yii::app(), se asume la aplicación como raíz, así que para la función se renderizaría como: "?r=/index"...
En otras palabras, en el primer caso, se asume que se está llamando una "action" del mismo "controller", pero el segundo caso, se asume que es un "controller".
Espero haber contestado la pregunta
Ricardo Obregón
YiiFramework en Español - http://yiiframework.co/ - http://yiiframeworkenespanol.org/ - Yii Code Generator for Bootstrap
http://obregon.co/
PHP 5.3+, nginx 1.2, MySQL, MariaDB, PerconaDB, PostgreSQL, Yii 1.x-dev.
Follow me: @robregonm & @obregonco.
YiiFramework en Español - http://yiiframework.co/ - http://yiiframeworkenespanol.org/ - Yii Code Generator for Bootstrap
http://obregon.co/
PHP 5.3+, nginx 1.2, MySQL, MariaDB, PerconaDB, PostgreSQL, Yii 1.x-dev.
Follow me: @robregonm & @obregonco.
#3
Posted 23 October 2012 - 03:32 AM
robregonm, on 22 October 2012 - 01:09 PM, said:
Hola Hiei,
La diferencia es grande
Los métodos llamados desde $this, normalmente son de ámbito local, mientras que los de Yii::app() son a nivel global de la aplicación.
Por poner un ejemplo, la función createUrl()
Para el caso de $this, la función asume que todas las URLs pertenecen al controlador, así que si hago un createUrl('index') y el controlador se llama "Cont", entonces se convierte en "index.php?r=/cont/index".
Pero en el caso de Yii::app(), se asume la aplicación como raíz, así que para la función se renderizaría como: "?r=/index"...
En otras palabras, en el primer caso, se asume que se está llamando una "action" del mismo "controller", pero el segundo caso, se asume que es un "controller".
Espero haber contestado la pregunta
La diferencia es grande
Los métodos llamados desde $this, normalmente son de ámbito local, mientras que los de Yii::app() son a nivel global de la aplicación.
Por poner un ejemplo, la función createUrl()
Para el caso de $this, la función asume que todas las URLs pertenecen al controlador, así que si hago un createUrl('index') y el controlador se llama "Cont", entonces se convierte en "index.php?r=/cont/index".
Pero en el caso de Yii::app(), se asume la aplicación como raíz, así que para la función se renderizaría como: "?r=/index"...
En otras palabras, en el primer caso, se asume que se está llamando una "action" del mismo "controller", pero el segundo caso, se asume que es un "controller".
Espero haber contestado la pregunta
Hola Ricardo,
gracias por tu respuesta, según tu explicación yo entiendo que entonces es mejor usar $this, pero he hecho una prueba y he obtenido unos resultados que me desconciertan un poco.
he hecho 2 vistas en el mismo controlar con la prueba siguiente:
<?php
echo "<h1>".memory_get_usage()."</h1>\n";
?>
<?php echo Yii::app()->createUrl('controlador/index') ?>
<?php
echo "<h1>".memory_get_usage()."</h1>\n";
?>
y en otra vista:
<?php
echo "<h1>".memory_get_usage()."</h1>\n";
?>
<?php echo $this->createUrl('controlador/index') ?>
<?php
echo "<h1>".memory_get_usage()."</h1>\n";
?>
y los resultados de uso de memoria han sido estos:
con this
2567744
2569856
diferencia:
-2112
con Yii:app
2568616
2570520
diferencia:
-1904
con this
2568248
2570360
diferencia:
-2112
con Yii:app
2568616
2570520
diferencia:
-1904
me desconcierta muchísimo que use más memoria para un $this que para un Yii:app(), estoy haciendo algo mal? alguna mala configuración del servidor? o al ser Yii:app un método estático acaba siendo más óptimo, en este caso?
#4
Posted 23 October 2012 - 09:50 AM
Es normal, de hecho internamente el $this llama a Yii::app(), de ahí q siempre consuma más..., así que habrá ocasiones en que sea mejor usar $this y otras Yii::app()... cuando $this ofrezca la funcionalidad lista para usar, se usa esa... y cuando necesitamos la funcionalidad básica, entonces acudimos a Yii:app()
Saludos
Saludos
Ricardo Obregón
YiiFramework en Español - http://yiiframework.co/ - http://yiiframeworkenespanol.org/ - Yii Code Generator for Bootstrap
http://obregon.co/
PHP 5.3+, nginx 1.2, MySQL, MariaDB, PerconaDB, PostgreSQL, Yii 1.x-dev.
Follow me: @robregonm & @obregonco.
YiiFramework en Español - http://yiiframework.co/ - http://yiiframeworkenespanol.org/ - Yii Code Generator for Bootstrap
http://obregon.co/
PHP 5.3+, nginx 1.2, MySQL, MariaDB, PerconaDB, PostgreSQL, Yii 1.x-dev.
Follow me: @robregonm & @obregonco.
#5
Posted 24 October 2012 - 03:08 AM
pero que $this llame a Yii::app(), solo ocurre en la vista, no? en controladores y modelos, estará llamando solo a la propia class en la que se encuentra, no?
#6
Posted 24 October 2012 - 03:24 PM
Eso depende del ámbito.
Si estoy en la vista o en el controlador: $this equivale al controlador activo. En este caso, casi siempre se hace un llamado interno a Yii::app(), aunque no siempre.
En los modelos y demás: equivale a la clase en la que esté la instrucción (que no es controlador). En este caso tendría que verificar exactamente qué atributos y métodos tiene la clase.
Si estoy en la vista o en el controlador: $this equivale al controlador activo. En este caso, casi siempre se hace un llamado interno a Yii::app(), aunque no siempre.
En los modelos y demás: equivale a la clase en la que esté la instrucción (que no es controlador). En este caso tendría que verificar exactamente qué atributos y métodos tiene la clase.
Ricardo Obregón
YiiFramework en Español - http://yiiframework.co/ - http://yiiframeworkenespanol.org/ - Yii Code Generator for Bootstrap
http://obregon.co/
PHP 5.3+, nginx 1.2, MySQL, MariaDB, PerconaDB, PostgreSQL, Yii 1.x-dev.
Follow me: @robregonm & @obregonco.
YiiFramework en Español - http://yiiframework.co/ - http://yiiframeworkenespanol.org/ - Yii Code Generator for Bootstrap
http://obregon.co/
PHP 5.3+, nginx 1.2, MySQL, MariaDB, PerconaDB, PostgreSQL, Yii 1.x-dev.
Follow me: @robregonm & @obregonco.
#8
Posted 29 October 2012 - 10:09 AM
Con gusto, para eso está la comunidad
Ricardo Obregón
YiiFramework en Español - http://yiiframework.co/ - http://yiiframeworkenespanol.org/ - Yii Code Generator for Bootstrap
http://obregon.co/
PHP 5.3+, nginx 1.2, MySQL, MariaDB, PerconaDB, PostgreSQL, Yii 1.x-dev.
Follow me: @robregonm & @obregonco.
YiiFramework en Español - http://yiiframework.co/ - http://yiiframeworkenespanol.org/ - Yii Code Generator for Bootstrap
http://obregon.co/
PHP 5.3+, nginx 1.2, MySQL, MariaDB, PerconaDB, PostgreSQL, Yii 1.x-dev.
Follow me: @robregonm & @obregonco.
Share this topic:
Page 1 of 1

Help












