Можно ли связать статический вместе с нестатическим методом в PHP?

Вот мой пример кода Class User, но он не работает, когда я добавил статический метод с открытыми методами:

<?php

namespace App\Classic;

class User
{
public $username;
public static $upassword;
public $age;
public $message;

public function username($username)
{
$this->username = $username;
echo $this->username."<br>";
return $this;
}

public static function password($upassword)
{
self::$upassword = $upassword;
echo self::$upassword."<br>";
}

public function age($age)
{
$this->age = $age;
echo $this->age."<br>";
return $this;
}

public function message($message)
{
$this->message = $message;
echo $this->message."<br>";
return $this;
}
}

и это побочный эффект метода цепочки:

$user = new User();
$user::password('secret')
->username('admin')
->age(40)
->message('lorem ipsum');

1

Решение

Я не знаю, какая логика стоит за этим, но все же это решение будет полезным.

Попробуйте этот фрагмент кода здесь

<?php

namespace App\Classic;

ini_set('display_errors', 1);

class User
{

public $username;
public static $upassword;
public static $currentObject=null;//added this variable which hold current class object
public $age;
public $message;

public function __construct()//added a constructor which set's current class object in a static variable
{
self::$currentObject= $this;
}
public function username($username)
{
$this->username = $username;
echo $this->username . "<br>";
return $this;//added this statment which will return current class object
}

public static function password($upassword)
{
self::$upassword = $upassword;
echo self::$upassword . "<br>";
return self::$currentObject;
}

public function age($age)
{
$this->age = $age;
echo $this->age . "<br>";
return $this;
}

public function message($message)
{
$this->message = $message;
echo $this->message . "<br>";
return $this;
}

}

$user = new User();
$user::password('secret')
->username('admin')
->age(40)
->message('lorem ipsum');
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]