Кто знает Java - полноценная замена кода или нет?
===
Taking advantage of PHP5′s magic methods __get, __set, and __call, the bean pattern can be implemented pretty easily in PHP. Here’s an example of it in Java:
One of the annoyances of this (at least for me) is that you end up creating a bunch of getter/setter methods that don’t do anything special – they either return the encapsulated variable or set it. So, I wrote a base class that uses PHP5′s magic methods to take care of all of those generic getters and setters.
Using the above abstract class, the example UserBean in PHP would become just:
And you can access the bean as follows, without having to write any of these functions:
If you needed to do any additional work in the getter function, you can just create a getter function like you normally would:
In addition, if you want cleaner syntax (i.e. when mixing PHP with your HTML), you could also access properties of the bean directly, and the getter/setter functions will be called automatically if they exist. Since the properties are “protected”, attempts to access the properties will get routed to the __get and __set functions, where it will attempt to call a getter/setter if it exists.
===
Taking advantage of PHP5′s magic methods __get, __set, and __call, the bean pattern can be implemented pretty easily in PHP. Here’s an example of it in Java:
PHP:
public class UserBean {
protected String username, email, location;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getLocation {
return location;
}
public void setLocation(String location) {
this.location = location;
}
}
PHP:
abstract class Bean {
public function __call($name, $arguments) {
if (strpos($name, 'get') === 0) {
$property = strtolower(substr($name,3,1)) . substr($name,4);
return $this->$property;
}
elseif (strpos($name, 'set') === 0) {
$property = strtolower(substr($name,3,1)) . substr($name,4);
return $this->$property = $arguments[0];
}
else {
throw new Exception("Method $name does not exist");
}
}
public function __get($name) {
$getter = 'get' . ucfirst($name);
if (method_exists($this, $getter)) {
return call_user_func(array($this, $getter));
}
return $this->$name;
}
public function __set($name, $value) {
$setter = 'set' . ucfirst($name);
if (method_exists($this, $setter)) {
call_user_func(array($this, $setter), $value);
}
else {
$this->$name = $value;
}
}
}
PHP:
class UserBean extends Bean {
protected $username, $email, location;
}
PHP:
$user = new UserBean();
$user->setUsername('Jim');
echo $user->getUsername();
PHP:
class UserBean extends Bean {
protected $username, $email, location;
public function getUsername() {
return "User: $username";
}
}
PHP:
$user = new UserBean();
$user->username = 'Jim';
echo $user->username;;