Yii Framework Forum: $This-> Vs Yii:app()-> - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

$This-> Vs Yii:app()-> Rate Topic: -----

#1 User is offline   Hiei 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 22-October 12

Posted 22 October 2012 - 11:44 AM

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.
0

#2 User is offline   robregonm 

  • Experienced Yii Developer
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 601
  • Joined: 30-July 09
  • Location:Colombia

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 :)
Ricardo Obregón
LinkedIn Profile
YiiFramework en Español - http://yiiframework.co/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx, MySQL, PostgreSQL, Yii 1.x & 2.x, CanJS and more.
Follow me: @robregonm & @obregonco & @1ServerCo.
0

#3 User is offline   Hiei 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 22-October 12

Posted 23 October 2012 - 03:32 AM

View Postrobregonm, 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 :)


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?
0

#4 User is offline   robregonm 

  • Experienced Yii Developer
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 601
  • Joined: 30-July 09
  • Location:Colombia

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
Ricardo Obregón
LinkedIn Profile
YiiFramework en Español - http://yiiframework.co/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx, MySQL, PostgreSQL, Yii 1.x & 2.x, CanJS and more.
Follow me: @robregonm & @obregonco & @1ServerCo.
0

#5 User is offline   Hiei 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 22-October 12

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?
0

#6 User is offline   robregonm 

  • Experienced Yii Developer
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 601
  • Joined: 30-July 09
  • Location:Colombia

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.
Ricardo Obregón
LinkedIn Profile
YiiFramework en Español - http://yiiframework.co/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx, MySQL, PostgreSQL, Yii 1.x & 2.x, CanJS and more.
Follow me: @robregonm & @obregonco & @1ServerCo.
0

#7 User is offline   Hiei 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 22-October 12

Posted 25 October 2012 - 02:34 AM

Muchas gracias, Ricardo, ahora lo tengo un poco más claro!
0

#8 User is offline   robregonm 

  • Experienced Yii Developer
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 601
  • Joined: 30-July 09
  • Location:Colombia

Posted 29 October 2012 - 10:09 AM

Con gusto, para eso está la comunidad ;)
Ricardo Obregón
LinkedIn Profile
YiiFramework en Español - http://yiiframework.co/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx, MySQL, PostgreSQL, Yii 1.x & 2.x, CanJS and more.
Follow me: @robregonm & @obregonco & @1ServerCo.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users