Klassen Casten ?

  • PHP

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von N3X.

    Klassen Casten ?

    Hallo ich würde gerne eine Klasse Benutzer erstellen, in dieser sich die Benutzer Daten befinden. Diese soll mit einer Funktion erstellt werden. Diese gibt dann die erstellte Klasse zurück. Wie kann ich nun aber einer anderen Klasse sagen (Casten) , dass das die Benutzer Klasse ist ?
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    so geht es

    PHP-Quellcode

    1. [b][/b]<?php
    2. class User {
    3. public $username;
    4. public $password;
    5. public $group;
    6. }
    7. class UserFactory
    8. {
    9. public function getUser()
    10. {
    11. $user = new User();
    12. $user->username = "Test";
    13. $user->password = "ABC";
    14. $user->group = 0;
    15. return $user;
    16. }
    17. }
    18. $userFactory = new UserFactory();
    19. $user = $userFactory->getUser();
    20. echo $user->username;
    21. ?>[b][/b]
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    windowsfan schrieb:

    php programmiert man ohne datentypen, das ist u.A. auch der grund warum php nicht als richtige programmiersprache angesehen wird


    Das stimmt in der Form so nicht ganz. Sicher lassen sich ich sage mal Datentypen erzwingen, ebenfalls auch komplexe Datentypen. Schau dir dazu einmal das Zend-Framework 2 als hervorragendes Beispiel an. Typecasting ist in PHP bei sorgfälltiger Programmierung auch gar nicht auf komplexe Datentypen notwendig.


    backtothetoast schrieb:




    Typecasting ist an der stelle Quasi erledigt, besserer Umgang wäre allerdings Hydratorklassen einzusetzen und Typehinting zu verwenden.


    Dazu folgendes Beispiel, aus einem aktuellen Projekt von mir:

    Teamspeak3AdapterInterface

    PHP-Quellcode

    1. <?php
    2. namespace TSCore\Adapter;
    3. use TeamSpeak3\Node\Server;
    4. interface Teamspeak3AdapterInterface {
    5. public function init(array $config);
    6. public function writeMessage($message);
    7. public function setTeamspeak(Server $teamspeak);
    8. /**
    9. * @return TeamSpeak3
    10. */
    11. public function getTeamspeak();
    12. }


    Teamspeak3Adapter

    PHP-Quellcode

    1. <?php
    2. /*
    3. * @author N3X
    4. * @copyright Copyright (c) 2015, Ilya Beliaev
    5. * @since Version 1.0
    6. *
    7. * $Id$
    8. * $Date$
    9. */
    10. namespace TSCore\Adapter;
    11. use TeamSpeak3\TeamSpeak3;
    12. use Zend\Stdlib\Exception\InvalidArgumentException;
    13. use TeamSpeak3\Node\Server;
    14. class Teamspeak3Adapter implements Teamspeak3AdapterInterface{
    15. protected $ts;
    16. public function init(array $config) {
    17. if(!array_key_exists("username", $config)){
    18. throw new InvalidArgumentException("Username for Teamspeak-Server not set");
    19. }
    20. if(!array_key_exists("password", $config)){
    21. throw new InvalidArgumentException("Password for Teamspeak-Server not set");
    22. }
    23. if(!array_key_exists("server", $config)){
    24. throw new InvalidArgumentException("Servername for Teamspeak-Server not set");
    25. }
    26. if(!array_key_exists("port", $config)){
    27. throw new InvalidArgumentException("Port for Teamspeak-Server not set");
    28. }
    29. $username = $config["username"];
    30. $password = $config["password"];
    31. $server = $config["server"];
    32. $port = $config["port"];
    33. $ts = TeamSpeak3::factory("serverquery://$username:$password@$server/?server_port=$port");
    34. $this->setTeamspeak($ts);
    35. }
    36. public function writeMessage($message) {
    37. $this->getTeamspeak()->message($message);
    38. }
    39. /**
    40. * Get Teamspeak
    41. * @return Server
    42. */
    43. public function getTeamspeak() {
    44. return $this->ts;
    45. }
    46. /**
    47. * Set Teamspeak
    48. * @param TeamSpeak3 $teamspeak
    49. */
    50. public function setTeamspeak(Server $teamspeak) {
    51. $this->ts = $teamspeak;
    52. }
    53. }


    TS3Adapter

    PHP-Quellcode

    1. <?php
    2. /*
    3. * @author N3X
    4. * @copyright Copyright (c) 2015, Ilya Beliaev
    5. * @since Version 1.0
    6. *
    7. * $Id$
    8. * $Date$
    9. */
    10. namespace TSCore\Authentication;
    11. use Zend\Authentication\Result;
    12. use Zend\Authentication\Adapter\AdapterInterface;
    13. use TSCore\Adapter\Teamspeak3AdapterInterface;
    14. use TSCore\Entity\SuperAdmin;
    15. class TS3Adapter implements AdapterInterface{
    16. protected $authenticateResultInfo;
    17. protected $identity;
    18. protected $credential;
    19. protected $teamspeak;
    20. protected $config;
    21. public function __construct(Teamspeak3AdapterInterface $teamspeak, array $config) {
    22. $this->setTeamspeakAdapter($teamspeak);
    23. $this->setConfig($config);
    24. }
    25. public function setConfig(array $config){
    26. $this->config = $config;
    27. }
    28. public function getConfig(){
    29. return $this->config;
    30. }
    31. public function setTeamspeakAdapter(Teamspeak3AdapterInterface $teamspeak){
    32. $this->teamspeak = $teamspeak;
    33. return $this;
    34. }
    35. /**
    36. *
    37. * @return \TSCore\Adapter\Teamspeak3AdapterInterface
    38. */
    39. public function getTeamspeakAdapter(){
    40. return $this->teamspeak;
    41. }
    42. public function setIdentity($identity){
    43. $this->identity = $identity;
    44. return $this;
    45. }
    46. public function getIdentity(){
    47. return $this->identity;
    48. }
    49. public function setCredential($credential){
    50. $this->credential = $credential;
    51. return $this;
    52. }
    53. public function getCredential(){
    54. return $this->credential;
    55. }
    56. /**
    57. * Setup for authentication result
    58. */
    59. protected function setupResult(){
    60. // setup result info
    61. $this->authenticateResultInfo = array(
    62. 'code' => Result::FAILURE,
    63. 'identity' => $this->getIdentity(),
    64. 'messages' => array()
    65. );
    66. return true;
    67. }
    68. /**
    69. * Creates a Zend\Authentication\Result object
    70. *
    71. * @return AuthenticationResult
    72. */
    73. protected function createResult(){
    74. return new Result(
    75. $this->authenticateResultInfo['code'],
    76. $this->authenticateResultInfo['identity'],
    77. $this->authenticateResultInfo['messages']
    78. );
    79. }
    80. public function authenticate() {
    81. $this->setupResult();
    82. if(!$this->getIdentity()){
    83. $this->authenticateResultInfo["messages"][] = "The Username Field is required.";
    84. return $this->createResult();
    85. }
    86. if(!$this->getCredential()){
    87. $this->authenticateResultInfo["messages"][] = "The Password Field is required.";
    88. return $this->createResult();
    89. }
    90. try{
    91. $onfig = $this->getConfig();
    92. $config["username"] = $this->getIdentity();
    93. $config["password"] = $this->getCredential();
    94. $this->getTeamspeakAdapter()->init($config);
    95. } catch (\Exception $ex) {
    96. $this->authenticateResultInfo["code"] = Result::FAILURE_CREDENTIAL_INVALID;
    97. $this->authenticateResultInfo["messages"][] = "Login failed.";
    98. return $this->createResult();
    99. }
    100. $oUser = new SuperAdmin();
    101. $oUser->setUsername($this->getIdentity());
    102. $oUser->setPassword($this->getCredential());
    103. $this->authenticateResultInfo['code'] = Result::SUCCESS;
    104. $this->authenticateResultInfo['identity'] = $oUser;
    105. $this->authenticateResultInfo["messages"][] = "logged in.";
    106. return $this->createResult();
    107. }
    108. }


    Sofern in PHP ordentlich entwickelt wird, ist das Casten von Datentypen höchstens auf unterster Ebene notwendig (strings, ints, doubles und etc.).

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „N3X“ ()