email class

Status
Niet open voor verdere reacties.
Probeer het is zonder __autoload() want na mijn ervaringen werkt deze functie niet goed
Anders kun je dit ook nog proberen... ik heb het niet getest maar het zal vast wel werken
Verder zou ik de classes aanroepen met een exception...

PHP:
<?php
/**
 * Load classes using the __autoload() magic function in php
 *
 * @param mixed $class The class name
 */
function __autoload($class)
{
	//canonicalize the absolute pathname
	$path = realpath('libs/' . $class .'.php');
	
	//check if the file exists
	//else throw a new exception
	if (file_exists($path))
	{
		//file exists
		required_once($path);
	} else
	{
		//file does not exists, throw exception
		throw new Exception('Unable to load <strong>' . $path . '</strong>');
	}
}

//try to do the email action
//else throw exception
try
{
	$email = new emailer();
	..
} catch(Exception $e)
{
	echo $e->getMessage() . "\n";
}
?>

Overige opmerkingen:
- Begin een classe altijd met een hoofdletter net als elk nieuwe woord (camel casing).
- Zorg dat je classe naam gelijk is aan je bestandsnaam
- Gebruik comments :-)
 
@martijn kunt u onderstaande code toelichten wat het doet
function __autoload($class)
{
require_once('libs/' . $class .'.php');
}
ik schrijf geen massage.php dus het kan geen schrijffout zijn en die andere pakt hij op deze mannier
@phobia
$msg = new message;
je typo
massage.php
als de classnaam ook massage is in je massage.php
dan $msg = new massage;

anders moet je je bestandsnaam veranderen
bestandsnaam doet er bij mijn weten niet veel toe
PHP:
//stel
class mijnobject{
}
class mijnobject2{
	function mijnobject2($parameter){
		
       
	}
       //of
        public function __construct($parameter){
     
        }
}

//dan kan je 
$mijninstantie = new mijnobject();//haken zeer belangerijk
$mijninstantie2 = new mijnobject2($veeldata);//zie constructor moet parameter bevatten
$mijhardcopyof = clone $mijninstantie;
 
bestandsnaam doet er bij mijn weten niet veel toe

__autoload() is een PHP 5 helper voor het laden van je classes... meestal word er een eigen functie geschreven vaak ook wel de bootstrap genoemd waar alles word ingeladen wat je nodig hebt in je applicatie.
Bij de __autoload() functie is het een vereiste dat je classenaam en bestandsnaam gelijk is aan elkaar anders doet hij niet.
 
doe maar een echo van $class in de autoload, dan zul je zien dat hij de class naam mee neemt.
en als je ook nog met namespaces werkt neemt hij dat ook mee.
 
eh ik vat het niet helemaal
dit heb ik:
index.php
PHP:
<?
 
function __autoload($class)
{
    require_once('/libs/' . $class .'.php'); 
}
$email = new emailer();
$email->generatemsg('hows life?', 'good');
echo $email->sendmsg();
echo '<br /><br />';
$msg = new message();
$msg->createmsg('hey there');
echo $msg->postmsg();
?>
en settings.php
PHP:
<?

class settings
{
	protected function __construct()
	{
		self::make();
	}
	
	public function make()
	{
		$this->site_email	= 'martijn@tycal.org';
		$this->site_name	= 'tycal';
		$this->user_id		= '1';
	}
}
?>
en massage.php:
PHP:
<?

class massage extends settings
{
	private $post;

	public function __construct()
	{
		parent::__construct();
	}
	public function greatmsg($str)
	{
		$this->post = $str;
	}
	public function postmsg()
	{
		return "{this->site_name} / {this->site_email}/ {this->user_id}: {this->post}";
	}
}

?>
en dit is emailer.php
PHP:
<?

class emailer extends settings
{
	private $msg;
	private $subj;
	
	public function __construct()
	{
		parent::__construct();
	}
	public function generatemsg($msg, $subj)
	{
		$this->msg = $msg;
		$this->subj = $subj;
	}
	public function sendmsg()
	{
		if(!empty($this->msg))
		return "massage from: {$this->site_name}
		<br /> user ID {$this->user_id}";
		else
		return "nothing was typed";
		
	}
}

?>
weet iemand wat er verkeerd gaat?
 
$msg = new message(); deze class bestaat niet

moet dit zijn
$msg = new massage();
 
En deze method bestaat niet
$msg->createmsg('hey there');

in je class heb je deze method
public function greatmsg($str)
{
$this->post = $str;
}

je moet wel uitkijken dat je geen schrijffouten maakt, want anders gaat het lang duren voor je iets werkend krijgt!
 
eh hij doet het nog steeds niet zitten er meer spelfouten in?
die 2 die jij hierboven hebt gezegt heb ik aangepast in mijn script
 
eh hij doet het nog steeds niet zitten er meer spelfouten in?
die 2 die jij hierboven hebt gezegt heb ik aangepast in mijn script

Hey jij moet snel naar phpDesigner gaan kijken merk op dat deze zeer snel codeaanvuller weergeeft en ik heb ook dislectie maar dat is vermindert met de jaren.

maar zou u de opmerking die php laat zien eens meegeven.

ALERT !!!!! U MOET VOLGENDE IN ELK SCRIPT AANPASSEN <? naar <?php
 
Laatst bewerkt:
dat heb ik al aangepast
en wat is phpdesigner?
en wat maakt <? <?php nou uit?
 
Laatst bewerkt:
tja anders moet je je php.ini aanpassen en werken je scripts niet op een server die standaard geinstalleert is.

een editor tegen een betaalbare prijs en bij mijn weten een van de beste is.
 
wat voor een error geeft hij nu dan?

<? is shorthand voor <?PHP
net als <?="hello" ?> shorthand is voor <?PHP echo "hello" ?>

Maar dat werkt alleen als de server ook ingesteld is op het herkennen en lezen van shorthand
Dat wordt in de php.ini file ingesteld
 
eerst en vooral
PHP:
<?
 
function __autoload($class)
{
    require_once('/libs/' . $class .'.php');//ERROR1 lib/ bestand stond in root
}
$email = new emailer();
$email->generatemsg('hows life?', 'good');
echo $email->sendmsg();
echo '<br /><br />';
$msg = new message();
$msg->createmsg('hey there');
echo $msg->postmsg();
?>
ten tweede dit
PHP:
<?php
 //ERROR1 file not found rename file
class message extends settings{//ERROR2 rename classname
    //TODO message overerven van settings vind ik raar 
    private $post;
    public function __construct(){
        parent::__construct();
    }
    public function createmsg($str){//ERROR 3 rename methode
    
        $this->post = $str;
    }
    public function postmsg() {
        return "{this->site_name} / {this->site_email}/ {this->user_id}: {this->post}";
    }
}
?>
 
Laatst bewerkt:
te snel gereageert en te weinig gelezen ik laat het staan maar ik hoop dat je het mij vergeeft
wat voor een error geeft hij nu dan?

<? is shorthand voor <?PHP
net als <?="hello" ?> shorthand is voor <?PHP echo "hello" ?>

Maar dat werkt alleen als de server ook ingesteld is op het herkennen en lezen van shorthand
Dat wordt in de php.ini file ingesteld

zie en merk dat niet elke hosting dit toelaat
;;;;;;;;;;;;;;;;;;;;
; Language Options ;
;;;;;;;;;;;;;;;;;;;;

; Enable the PHP scripting language engine under Apache.
; http://php.net/engine
engine = On

; This directive determines whether or not PHP will recognize code between
; <? and ?> tags as PHP source which should be processed as such. It's been
; recommended for several years that you not use the short tag "short cut" and
; instead to use the full <?php and ?> tag combination. With the wide spread use
; of XML and use of these tags by other languages, the server can become easily
; confused and end up parsing the wrong code in the wrong context. But because
; this short cut has been a feature for such a long time, it's currently still
; supported for backwards compatibility, but we recommend you don't use them.
; Default Value: On
; Development Value: Off
; Production Value: Off
; http://php.net/short-open-tag
;short_open_tag = Off
; XAMPP for Linux is currently old fashioned
short_open_tag = On
 
Laatst bewerkt:
hij doet het nog steeds niet en wat bedoel je met error 1 eror 2 en eroor 3 wat is daar fout?
 
zoals hierboven enkele keren is uitgelegt moet uw bestand hernoemen
massage (iets dat gezellig met je lief mag doen)naar message(een bericht dat je kan verzenden)
verder copyeer je de de lijn waar error achter staat en plaats die één regel boven die van u zodat u ziet welke letters u mist.

vervolgens plaats eens de huidige situatie hieronder
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan