У меня есть следующий скрипт
myclass.php
<?php $myarray = array('firstval','secondval'); class littleclass { private $myvalue; public function __construct() { $myvalue = "INIT!"; } public function setvalue() { $myvalue = $myarray[0]; //ERROR: $myarray does not exist inside the class } } ?>
Есть ли способ сделать $ myarray доступным внутри маленького класса, через простую декларацию? Я не хочу передавать его в качестве параметра конструктору, если это возможно.
Кроме того, я надеюсь, что вы на самом деле МОЖЕТ сделать глобальные переменные видимыми для класса php каким-то образом, но это мой первый раз, столкнувшийся с проблемой, поэтому я действительно не знаю.
включая global $myarray
в начале функции setvalue()
.
public function setvalue() { global $myarray; $myvalue = $myarray[0]; }
ОБНОВИТЬ:
Как отмечается в комментариях, это плохая практика, и ее следует избегать.
Лучшим решением будет следующее: https://stackoverflow.com/a/17094513/3407923 .
в классе вы можете использовать любую глобальную переменную с $GLOBALS['varName'];
Построить новый класс singleton, используемый для хранения и доступа к переменным, которые вы хотите использовать?
$GLOBALS['myarray'] = array('firstval','secondval');
В классе вы просто можете использовать $ GLOBALS ['myarray'].
Почему вы просто не используете геттер и сеттер для этого?
<?php $oLittleclass = new littleclass ; $oLittleclass->myarray = array('firstval','secondval'); echo "firstval: " . $oLittleclass->firstval . " secondval: " . $oLittleclass->secondval ; class littleclass { private $myvalue ; private $aMyarray ; public function __construct() { $myvalue = "INIT!"; } public function __set( $key, $value ) { switch( $key ) { case "myarray" : $this->aMyarray = $value ; break ; } } public function __get( $key ) { switch( $key ) { case "firstval" : return $this->aMyarray[0] ; break ; case "secondval" : return $this->aMyarray[1] ; break ; } } } ?>