php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
socket class problem


 
maxi123
14-06-2011, 16:48 
 
hi leute,
code gerade eine socket klasse, sieht so aus
<?php
error_reporting(0);

class socket{
private $socketServerAddress;
private $socketServerPort;
private $socketSocketHandler;

public function __construct($serverAddress, $serverPort){
$this->setInternalVariable('socketServerAddress', $serverAddress);
$this->setInternalVariable('socketServerPort', $serverPort);
}

public function __destruct(){
}

public function setInternalVariable($variable, $value){
$this->$variable = $value;
}

public function errorGetLast(){
return error_get_last();
}

private function formatError($errorCode){
$errorTable = array(
'1' => 'E_ERROR',
'2' => 'E_WARNING',
'4' => 'E_PARSE',
'8' => 'E_NOTICE',
'16' => 'E_CORE_ERROR',
'32' => 'E_CORE_WARNING',
'64' => 'E_COMPILE_ERROR',
'128' => 'E_COMPILE_WARNING',
'256' => 'E_USER_ERROR',
'512' => 'E_USER_WARNING',
'1024' => 'E_USER_NOTICE',
'2048' => 'E_STRICT',
'4096' => 'E_RECOVERABLE_ERROR',
'8192' => 'E_DEPRECATED',
'16384' => 'E_USER_DEPRECATED',
'30719' => 'E_ALL',
);
return $errorTable[$errorCode];
}

public function shutdownProcess($errorArrayFormat){
printf("%s In %s on Line %d \n%s \n", $this->formatError($errorArrayFormat['type']), $errorArrayFormat['file'], $errorArrayFormat['line'], $errorArrayFormat['message']);
}

public function createSocket(){
$this->socketSocketHandler = socket_create(AF_INET, SOCK_STREAM, 0) || die ($this->shutdownProcess($this->errorGetLast()));
}

public function bindSocket(){
socket_bind($this->socketSocketHandler, $this->socketServerAddress, $this->socketServerPort) || die ($this->shutdownProcess($this->errorGetLast()));
}
}

$object= new socket('xxxxx','xxx');
$object->createSocket();
$object->bindSocket();
das Problem ist hier nur, dass
er mir sagt dass socket_bind() expects parameter 1 to be resource, boolean given

ABER die ressource wurde doch korrekt gesetzt?

danke euch!

es liegt offensichtlich an dem || DIE
|| DIE geht nicht
nur OR

wieso das denn????

 
h3ll
14-06-2011, 16:54 
 
Eine Klasse sollte gar kein die() machen. die() ist böse.

Du solltest deinen Code so formatieren, dass man nicht 2 Meter nach rechts scrollen muss, um ihn zu lesen.

 
maxi123
14-06-2011, 17:03 
 
sehe ich sehr anders, tut aber eigentlich auch nichts zur sache
ausserdem muss ich hier gar nicht scrollen.

 
AmicaNoctis
14-06-2011, 17:06 
 
Hallo,

h3ll sagte es schon, dass du gar nicht mit die() arbeiten solltest, aber zu deiner Frage:

|| und or sind in PHP nicht das gleiche und daher auch nicht gegenseitig austauschbar. Die beiden Operatoren besitzen eine unterschiedliche Rangfolge, was syntaktische Unterschiede mit sich bringt und haben auch unterschiedliche Rückgabewerte.

Edit: Was das Scrollen angeht: wenn dein Bildschirm groß genug ist – schön für dich. Denk aber bitte auch an die anderen. In den Forenregeln steht übrigens auch, dass eine Zeilenlänge von 100 Zeichen eingehalten werden soll.

Gruß,

Amica

 
h3ll
14-06-2011, 17:07 
 
sehe ich sehr anders, tut aber eigentlich auch nichts zur sache

Richtig. Was du siehst, ist hier egal. Es ist jedenfalls falsch und gehört korrigiert.

ausserdem muss ich hier gar nicht scrollen.

Schön für dich, aber davon hab ich nichts. Wenn man sich nicht auf einen anderen Standard geeinigt hat, sollte eine Codezeile niemals länger als 80 Zeichen sein. Dies ist also in einem öffentlichen Forum, wo jeder Zugang hat, das absolut erlaubte Maximum. Willst du nicht, dass andere Leute deinen Code lesen können, dann poste nicht in einem öffentlichen Forum.

 
maxi123
14-06-2011, 17:09 
 
haste mir da nen link oder ne erklärung zu?
bisher dachte ich AND => &&
or => ||

danke!

 
AmicaNoctis
14-06-2011, 17:10 
 
haste mir da nen link oder ne erklärung zu?

http://www.php.net/manual/de/language.operators.php

 
maxi123
14-06-2011, 17:13 
 
PHP: Logische Operatoren - Manual (http://www.php.net/manual/de/language.operators.logical.php) sagt

eigentlich dasselbe zu || und or?

 
AmicaNoctis
14-06-2011, 17:42 
 
Brichst du jetzt bitte den Code um!?! (mit dem http://www.php-resource.de/forum/images/buttons/edit.gif-Button)

Klar, es ist beides ein logisches oder, aber:
// Das Ergebnis des Ausdrucks (false || true) wird $e zugewiesen
// Funktioniert wie: ($e = (false || true))
$e = false || true;

// Die Konstante "false" wird $f zugewiesen und danach wird true ignoriert
// Funktioniert wie: (($e = false) or true)
$f = false or true;


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:49 Uhr.