Gå til innhold

[Løst]Definere variabel i class?


Anbefalte innlegg

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?

Lenke til kommentar
Videoannonse
Annonse

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
Lenke til kommentar

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
Lenke til kommentar

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
Lenke til kommentar
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.

Lenke til kommentar
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;

}

?>

Lenke til kommentar

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.

Lenke til kommentar

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)); " ?

Lenke til kommentar

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
Lenke til kommentar
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;
	}
}
}

Lenke til kommentar

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å
×
×
  • Opprett ny...