Gå til innhold

[Løst]Definere variabel i class?


Anbefalte innlegg

Skrevet

Hei.

 

prøver å definere en variabel, inni en class.

 

	public function __construct () {
	$this -> user = $_POST['username'];
	$this -> email = $_POST['email'];
	$this -> pass = $_POST['password'];
	$this -> pass2 = $_POST['password2'];
}

public $pass = $this->pass;

 

error jeg får er

Parse error: parse error in C:\wamp\www\oop\index.php on line 21

 

public $pass = $this->pass; er linje 21.

 

Så, Hvordan definerer man egentlig variabler til å bli "normale" i en class?

Videoannonse
Annonse
Skrevet (endret)

PS_CS4: Bare la vær å skrive noe hvis du ikke aner hva du driver med.

 

Trådstarter: Du kan ikke gi "klasse-variabler" (properties) en annen variabel som verdi når du definerer dem. Altså må du kun definere variabelen utenfor en funksjon, og deretter sette verdien i __construct() eller en annen metode:

 

class Example{
public $user;
public $email;
public $pass;
public $pass2;

public function __construct () {
	$this -> user = $_POST['username'];
	$this -> email = $_POST['email'];
	$this -> pass = $_POST['password'];
	$this -> pass2 = $_POST['password2'];
}
}

 

Edit: Du må også definere de andre variablene du assigner til i __construct().

Edit 2: What Jonas said.

Endret av Lokaltog
Skrevet (endret)

Det du forsøker gir ingen mening. Det er ikke noe som heter en "normal" variabel. En klasse introduserer et helt særegent variabel-scope som du sannsynligvis ikke er vant med ved å programmere helt uten objekter. Et objekt kan ha public og private properties, som defineres i toppen av klassen. Inni hver funksjon derimot, der får du et nytt scope igjen, og deklarerer og bruker variabler slik du er vant med.

 

Edit: Det er for øvrig lurt å lese om design patterns samtidig som du lærer deg OOP. De eksisterer for å løse vanlige problemer man vanligvis støtter på ved programmeringsstruktur og uten et godt og skikkelig pattern vil du ikke få et like godt utbytte av å programmere OOP.

Endret av Jonas
Skrevet
Du kan ikke gi "klasse-variabler" (properties) en annen variabel som verdi når du definerer dem.

 

Det er jo faen meg akkurat det jeg skrev!!

Du kan like gjerne holde kjeft selv, og la Jonas svare.

Skrevet

Nei, det var langt i fra det du skrev. Hadde du forstått noe som helst om OOP ville du skjønt at det å definere $pass lenger opp ikke ville løst noe som helst.

Skrevet (endret)

class Example{
public $user;
public $email;
public $pass;
public $pass2;

public function __construct () {
	$this -> user = $_POST['username'];
	$this -> email = $_POST['email'];
	$this -> pass = $_POST['password'];
	$this -> pass2 = $_POST['password2'];
}

public function testFunction()
{
	return $this->user;
}
}

$class = new Example;

echo $class->user;
echo $class->testFunction();

 

Som sagt i tidligere i denne tråden, eller var det den andre du hadde, så kjøres __construct() når man lager et objekt av klassen (new Klassenavn).

Endret av m4rtin
Skrevet
Du kan ikke gi "klasse-variabler" (properties) en annen variabel som verdi når du definerer dem.

 

Det er jo faen meg akkurat det jeg skrev!!

Du kan like gjerne holde kjeft selv, og la Jonas svare.

Jeg trur du burde skjerpe deg litt hvis du skal få noe hjelp og respekt

Skrevet
Du kan ikke gi "klasse-variabler" (properties) en annen variabel som verdi når du definerer dem.

 

Det er jo faen meg akkurat det jeg skrev!!

Du kan like gjerne holde kjeft selv, og la Jonas svare.

Skal det der være en spøk? Hør på Lokaltog du, har du ikke peiling så la være å skriv noe. Du sier at $pass ikke er definert lengre opp, det er bare det at det ikke engang er mulig å tilegne variablen ved definisjon en verdi fra en annen variabel uavhengig om den er definert eller ei. Med andre ord, problemet er ikke at variablen ikke er definert slik du sier, men at det ikke er mulig å tilegne den en verdi fra en annen variabel.

Skrevet
Du kan ikke gi "klasse-variabler" (properties) en annen variabel som verdi når du definerer dem.

 

Det er jo faen meg akkurat det jeg skrev!!

Du kan like gjerne holde kjeft selv, og la Jonas svare.

Skal det der være en spøk? Hør på Lokaltog du, har du ikke peiling så la være å skriv noe. Du sier at $pass ikke er definert lengre opp, det er bare det at det ikke engang er mulig å tilegne variablen ved definisjon en verdi fra en annen variabel uavhengig om den er definert eller ei. Med andre ord, problemet er ikke at variablen ikke er definert slik du sier, men at det ikke er mulig å tilegne den en verdi fra en annen variabel.

 

Er forskjell på:

 

<?php

class ok {

private $pass = 'hei';

private $pas = $this->pass;

}

?>

 

og

 

 <?php

class ok {

private $pas = this->pass;

}

?>

Skrevet

Jamen les nå det jeg skriver da! Poenget er at det ikke går selv om den er definert fra før. Prøv selv. Du er garantert en «Parse error: syntax error, unexpected T_VARIABLE».

Skrevet

Forresten, Hvordan kan man "redefinere" en variabel fra en funksjon?

 

<?php

include "config.php";

class registrer {


public $user;
public $pass;
public $pass2;
public $email;


public function __construct () {
	$this -> user = $_POST['username'];
	$this -> email = $_POST['email'];
	$this -> pass = $_POST['password'];
	$this -> pass2 = $_POST['password2'];

}



public function pass_checker ($pass, $pass2) {

	if($pass != $pass2) {
		echo "Passordene er ikke like";
	}
	else
	{
		$pass = sha1(md5($pass));
		$pass = $this->pass;
		return $pass;
	}
}




}
if(isset($_POST['submit'])) {
$reg = new registrer;
$reg->pass_checker($reg->pass, $reg->pass2);
echo $reg->pass;

}


?>

 

Den henter forsatt $reg->pass; ut ifra $_POST data.

Skrevet

Er ikke helt sikker på om jeg forstod spørsmålet ditt.

 

Men når du kjører echo $reg->pass printer du jo ut innholdet i variabelen " public $pass" .

Denne variabelen får jo verdien sin satt i __contruct, og det er den verdien du printer ut.

 

Er ikke sikker på om jeg oppfattet problemstillingen din rett, men hva er det du egentlig ønsker ?

 

Printe ut "$pass = sha1(md5($pass)); " ?

Skrevet (endret)

Du må bytte om på disse.

$pass = sha1(md5($pass));
//$pass = $this->pass;
$this->pass = $pass;
return $pass;

 

Du burde også filtrere inndata fra $_POST.

Og du burde sende username, password etc som argument til __construct, ellers kan du ikke bruke koden fra kommandolinjen eller med data fra databasen.

 

class registrer {
public $user;
public $pass;
public $email;

public function __construct ($username, $email, $password, $password2, $salt = '') {
	if ($password === $password2)
		$this->pass = sha1(md5($password . $salt));
	else {
		$this->pass = false;
		// throw new Exception('Passordene er ulike');
	}
	$this->user = $username;
	$this->email = $email;
}

public function hasPassword() {
	return $this->pass !== false;
}	
}
if(isset($_POST['submit'])) {
$reg = new registrer($_POST['username'], $_POST['email'], $_POST['pass'], $_POST['pass2']);
if (!$reg->hasPassword()) {
	die("Passordene er ikke like");
} else {
	echo $reg->pass;
}
}

Endret av OIS
Skrevet
Og hvis jeg vil ha den som en egen funksjon?

 

class registrer {
public $user;
public $pass;
public $email;

public function __construct ($username, $email, $password, $password2) {
	if ($password === $password2)
		$this->pass = $password;
	else {
		$this->pass = false;
		// throw new Exception('Passordene er ulike');
	}
	$this->user = $username;
	$this->email = $email;
}

public function encryptPassword($salt = '') {
	if ($this->pass !== false) {
		return sha1(md5($this->pass . $salt));
	}
	else
	{
		return false;
	}
}
}

Skrevet (endret)

Oja.. Beklager.. leste feil. :wallbash:

 

Forresten,

Den du ga meg hjalp meg bare litt,

 

			return $this->pass = (md5($this->pass . $pass));

 

ble det til.

 

Takk! ;D

Endret av Eivind218

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...