2009-09-12 13 views
10

Supongamos que tengo un archivo PHP a lo largo de estas líneas:variables de métodos de acceso y fuera de las definiciones de clase

<?php 
function abc() { } 

$foo = 'bar'; 

class SomeClass { } 
?> 

¿Hay algo especial que tiene que hacer para utilizar abc() y $foo dentro SomeClass? Estoy pensando en utilizar global en una función para acceder a variables definidas fuera de la función.

(soy nuevo en la POO en PHP)

Respuesta

1

funciones están definidas a nivel mundial; por lo tanto, no necesita hacer nada para usarlos de un método de su clase.

Para más información, ver el function page in the manual, que dice (citando):

Todas las funciones y clases en PHP tienen el ámbito global - que pueden ser llamados fuera de una función, incluso si fueran definido dentro y viceversa.


Para la variable de $foo, por el contrario, usted tiene que utilizar la palabra clave global dentro de cada método/función en la que desea tener acceso a ella.

Para más información, no dude en leer la página sobre Variable scope, que debe traemos interesantes informaciones ;-)


Editar después del comentario:

Cada método/función con independencia se define dentro de una clase o no?

Si una "función" se define dentro de una clase, no se le llama una "función" nunca más, incluso si sigue siendo el function que se utiliza: se llama un "método"

métodos pueden ser utilizado de forma estática:

MyClass::myMethod(); 

o dinámica:

$obj = new MyClass(); 
$obj->myMethod(); 

Dependiendo de si se han definido como static o no.


Como nota al margen: si usted es nuevo en la POO en PHP, se debe invertir definitivamente el tiempo de leer la sección Classes and Objects (PHP 5) del manual: va a explicar mucho.

+0

¿Cada método/función independientemente de si se define dentro de una clase o no? –

+0

@Shadow: he editado mi respuesta para proporcionar un poco más de información, ¡espero que ayude! –

24

funciones fuera de cualquier clase son globales y se puede llamar desde cualquier lugar. Lo mismo con las variables ... simplemente recuerde usar el global para las variables ...

e.g

<?php 
function abc() { } 

$foo = 'bar'; 

class SomeClass { 
public function tada(){ 
    global $foo; 

    abc(); 
    echo 'foo and '.$foo; 
} 
} 
?> 
+4

¡No use 'global'! ¡Deberías evitarlo! Busque mi respuesta a continuación por qué. – brzuchal

-2

intenta crear una nueva clase que llaman $ foo y establece una variable como

class SomeClass { 
public function tada(){ 
    $foo = new Class; 
    $foo = $foo->getFoo; 
} 
} 
-1

Tanto la función y las variables de la caña de ser llamado dentro de las clases si es llamado antes

<?php 
    function abc() { 
     $ba = 'Hello'; 
     return $ba; 
    } 

$bar = 'World'; 

class foo { 

    public function __construct() { 
     global $bar; 
     $body = abc(); 
     $bod = $bar; 

     echo $body.$bod; 
    } 
} 

$foo = new foo(); 
$foo; 
+0

¡No use 'global'! ¡Deberías evitarlo! Busque mi respuesta a continuación por qué. – brzuchal

-2
<?php  
    class Foo { 
    public static $my_static = 'foo'; 

    public function staticValue() 
    { 
    return self::$my_static; 
    } 
    } 
    print Foo::$my_static."\n";//Accessing variables outside of class definitions 
    $foo = new Foo(); 

    print $foo->staticValue()."\n"; 
    ?>  
8

Simplemente pase su instancia de variable a objeto a través del constructor o páselo al método cuando sea necesario y recuerde DON 'T USE GLOBAL! ¡EN CUALQUIER SITIO!

¿Por qué global se debe evitar?

El punto en contra de las variables globales es que acoplan el código muy estrechamente. Toda su base de código depende de a) el nombre de la variable $ config yb) la existencia de esa variable. Si desea cambiar el nombre de la variable (por el motivo que sea), debe hacerlo en todas partes a lo largo de su base de código. Tampoco puede usar ningún fragmento de código que dependa de la variable independientemente de él. https://stackoverflow.com/a/12446305/1238574

Puede usar abc() en todas partes porque en PHP las funciones son accesibles a nivel mundial.

<?php 
function abc() { } 

$foo = 'bar'; 

class SomeClass { 
    private $foo; 
    public function __construct($foo) { 
     $this->foo = $foo; 
    } 
    public function doSomething() { 
     abc($this->foo); 
    } 
} 

class OtherClass { 
    public function doSomethingWithFoo($foo) { 
     abc($foo); 
    } 
} 

$obj = new SomeClass($foo); // voillea 

// or 

$obj2 = new OtherClass(); 
$obj2->doSomethingWithFoo($foo); 
Cuestiones relacionadas