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.
__getto become a 200-lineswitch? Also, this way allows you to definegetX/setXin a derived class and it will work without you having to touch the base class code. And finally, the syntax argument is IMHO bordering on religious so let's not take it up.