2013-10-06 7 views
0

Я довольно неопытный с ООП PHP, но вот мой вопрос ... скажем, у меня есть этот класс с одним свойством:Можно ли изменить свойство класса вне класса? (PHP)

class myClass { 

    public $property = array(); 

    public function getProperty() { 
     return $this->property; 
    } 

} 

Как бы это было возможно изменить значение $ имущества без самостоятельно изменить сам класс или создать экземпляр объекта из него, а затем изменить его свойство. Есть ли другой способ сделать это? Использование разрешения области?

Надеюсь, что имеет смысл, любая помощь будет высоко оценена.

+3

Вы имеете в виду [статические переменные] (http://php.net/manual/en/language.oop5.static.php)? –

+0

Если вы не создаете экземпляр класса, нет никакого свойства, так как нет объекта. Вы хотите изменить само определение класса? Это не может быть сделано в php напрямую. Вам нужно будет расширить класс и перезаписать свойство и вызвать расширенный класс. – Anthony

+0

Хотя вы можете это сделать, это ** плохая практика ** из-за двух вещей: она прерывает ** инкапсуляцию ** и вводит ** другая форма глобального состояния ** – Yang

ответ

5

Что вы хотите статический член

class MyClass { 
    public static $MyStaticMember = 0; 

    public function echoStaticMember() { 
     echo MyClass::$MyStaticMember; 
     //note you can use self instead of the class name when inside the class 
     echo self::$MyStaticMember; 
    } 

    public function incrementStaticMember() { 
     self::$MyStaticMember++; 
    } 
} 

то доступ к нему, как

MyClass::$MyStaticMember = "Some value"; //Note you use the $ with the variable name 

Теперь все экземпляры и все будут видеть одинаковое значение независимо от статического члена устанавливается так взять, например, в следующий

function SomeMethodInAFarFarAwayScript() { 
    echo MyClass::$MyStaticMember; 
} 

... 

MyClass::$MyStaticMember++; //$MyStaticMember now is: 1 

$firstClassInstance = new MyClass(); 

echo MyClass::$MyStaticMember; //will echo: 1 
$firstClassInstance->echoStaticMember(); //will echo: 1 

$secondInstance = new MyClass(); 
$secondInstance->incrementStaticMember(); // $MyStaticMember will now be: 2 

echo MyClass::$MyStaticMember; //will echo: 2 
$firstClassInstance->echoStaticMember(); //will echo: 2 
$secondInstance->echoStaticMember(); //will echo: 2 

SomeMethodInAFarFarAwayScript(); //will echo: 2 

PHPFiddle

+0

Спасибо! Хорошее решение. – Dannyd86

2

Я надеюсь, что это то, что вы ищете

<?php 

class myClass { 

    public $property = array(); 

    public function getProperty() { 
     print_r($this->property); 
    } 

} 


$a = new myClass(); 
$x = array(10,20); 

$a->property=$x; //Setting the value of $x array to $property var on public class 
$a->getProperty(); // Prints the array 10,20 

EDIT:

Как другие говорили, да вам нужно переменная будет объявлена ​​как static (если вы хотите изменить переменная без создания нового экземпляра класса или его распространения)

<?php 
class MyClass { 
    public static $var = 'A Parent Val'; 

    public function dispData() 
    { 
     echo $this->var; 
    } 
} 

echo MyClass::$var;//A Parent Val 
MyClass::$var="Replaced new var"; 
echo MyClass::$var;//Replacced new var 
?> 
+1

Я не думаю, что это то, что он ищет. Он ищет способ изменить «свойство» без создания экземпляра объекта. –

+0

OP сказал, что они не хотят создавать экземпляры ... – Anthony

+0

Да, ребята. Виноват. –

Смежные вопросы