I have seens many posts about it but no real answer :(. My problem is the following :
I have the following Bean class :
<?php
class ResultBean {
private $_label;
private $_resultSet;
private $_headerSet;
private $_numRows = 0;
private $_numFields = 0;
private $_empty = TRUE;
private $_dataArray;
private $_headerArray;
public function __construct($label) {
$v = trim($label);
$this->_label = empty($label) ? "" : $v;
}
public function setResultSet($value) {
if(!$value){
$this->_resultSet = null;
$this->_empty = TRUE;
}else{
$this->_resultSet = $value;
$this->_empty = FALSE;
}
return $this;
}
public function getResultSet() {
return $this->_resultSet;
}
public function getLabel() {
return $this->_label;
}
public function setLabel($value) {
$v = trim($value);
$this->_label = empty($value) ? null : $v;
return $this;
}
public function setHeaderSet($value) {
$this->_headerSet = !$value ? null : $value;
return $this;
}
public function getHeaderSet() {
return $this->_headerSet;
}
public function setNumRows($value) {
$this->_numRows = $value;
return $this;
}
public function getNumRows() {
return $this->_numRows;
}
public function setNumFields($value) {
$this->_numFields = $value;
return $this;
}
public function getNumFields() {
return $this->_numFields;
}
public function setDataArray($value) {
$this->_dataArray = $value;
return $this;
}
public function getDataArray() {
return $this->_dataArray;
}
public function setHeaderArray($value) {
$this->_headerArray = $value;
return $this;
}
public function getHeaderArray() {
return $this->_headerArray;
}
public function getEmpty() {
return $this->_empty;
}
public function __get($propertyName) {
$method = 'get' . ucfirst($propertyName);
if (!method_exists($this, $method)) {
$method = 'is' . ucfirst($propertyName);
if(!method_exists($this, $method)) {
throw new Exception('Invalid read property ' . $propertyName . ' in ' . get_class($this) . ' class.');
}
}
return $this->$method;
}
public function __isset($propertyName) {
try {
$_value = $this->__get($propertyName);
return !empty($_value);
} catch (Exception $e) {
/* if a property isn't readable it isn't set*/
return false;
}
}
public function __set($propertyName, $value) {
$method = 'set' . ucfirst($propertyName);
if ('mapper' == $method || !method_exists($this, $method)) {
throw new Exception('Invalid write property ' . $propertyName . ' in ' . get_class($this) . ' class.');
}
return $this->$method($value);
}
}
?>
In my index.php, I instantiate two beans :
$peopleBean = new ResultBean("Participants");
$countryBean = new ResultBean("Countries");
and would like to use them as following :
$beanArray[0] = $peopleBean;
$beanArray[1] = $countryBean;
for($i = 0; $i < 2; $i++){
$resultArray = array();
$bean = $beanArray[$i];
echo "bean label :" . $bean->label . " <br/>";
etc.
I get the following error message when loading my page :
Fatal error: Uncaught exception 'Exception' with message 'Invalid read property getLabel in ResultBean class.' in path/resultBean.php:103
Stack trace: #0 path/resultBean.php(106): ResultBean->__get('getLabel') #1 path/index.php(123): ResultBean->__get('label') #2 {main} thrown in path/resultBean.php on line 103
From all the pages I have read, it is not possible to use the java-style class-casting $bean = (ResultBean) $beanArray[$i]
.
How can I fix this ? Thank you =)
NOTE : I load the classes using an override of the __autoload() function and it works fine.
NOTE2 : I do make calls (outside of the array) like $peopleBean->numRows = *smthing*
and it also seems to work.