[PHP]var $test = 'test' . 'test'

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • van.der.schulting
  • Registratie: Juli 2002
  • Laatst online: 09-08-2024
Ik heb een hele simpele vraag, maar kan het niets vinden op Internet en heb ook geen boektot mijn beschikking:
Waarom werkt dit wel:
var $test = 'test';

maar dit niet (er vanuitgaande dat alle benodigde variabelen wel gedeclareerd zijn):
var $test2 = 'test2'.$test;
var $insertQuery = "REPLACE INTO 'courses_media' (course_id, media_id)
VALUES('" . mysql_real_escape_string($this->data['Media']['id'])."'";

Duidelijk is dat het iets met de '.' in de declaratie van de var te maken heeft. Wie kan me vertellen waar ik meer info kan vinden over de type toevoeging 'var' in PHP?

Acties:
  • 0 Henk 'm!

  • GrooV
  • Registratie: September 2004
  • Laatst online: 16-09 16:01
Ik zou zeggen, debuggen!

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 19-09 11:12
Als ik het zo zie ben je dus bezig met object georiënteerd programmeren, alleen dat var van PHP4 afstamt en niet van PHP 5 maar goed..

Voor zover ik weet accepteert een class (global variabele) alleen maar een string, const, integer, boolean. Indien je hem wilt extenden kan je dat heel simpel doen per $this->test2 .= $test lijkt me.

Acties:
  • 0 Henk 'm!

  • steffex
  • Registratie: Augustus 2003
  • Laatst online: 12-08 00:24
in de var declaratie van een class kun je geen variabelen gebruiken als inhoud!

het antwoord van manueltje22 is the way to go!

Acties:
  • 0 Henk 'm!

  • van.der.schulting
  • Registratie: Juli 2002
  • Laatst online: 09-08-2024
Het is toch wat handiger om de hele klasse te tonen ter verduidelijking:
Het probleem doet zich voor op regel 54:
Parse error: syntax error, unexpected '.', expecting ')' in media.php on line 54
Waarom mag ik bij een string als 'var $test' geen twee strings aan elkaar knopen middels '.'?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?php
class Media extends AppModel {

    var $name = 'Media';
    var $validate = array(
        'mediatype_id' => array('numeric'),
        'level_id' => array('numeric'),
        'title' => array('blank' =>
           array('rule' => 'notEmpty','required' => true, 'allowEmpty' => false)
        ),
        'description' => array('blank' =>
           array('rule' => 'notEmpty','required' => true, 'allowEmpty' => false)
        ),
        'url' => array('url' => 
           array('rule' => 'url', 'required' => true, 'allowEmpty' => false, 'message' => URL_MESSAGE)
        ),
        'icon_url' => array('url' => 
           array('rule' => 'url', 'required' => false, 'allowEmpty' => true, 'message' => URL_MESSAGE)
        ),
    );

    //The Associations below have been created with all possible keys, those that are not needed can be removed
    var $belongsTo = array(
        'Mediatype' => array(
            'className' => 'Mediatype',
            'foreignKey' => 'mediatype_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
        'Level' => array(
            'className' => 'Level',
            'foreignKey' => 'level_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        )
    );
    var $hasAndBelongsToMany = array(
        'Course' => array(
            'className' => 'Course',
            'joinTable' => 'courses_media',
            'foreignKey' => 'media_id',
            'associationForeignKey' => 'course_id',
            'unique' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'finderQuery' => '',
            'deleteQuery' => '',
            nsertQuery' => "REPLACE INTO 'courses_media' (course_id, media_id) 
            VALUES('" . mysql_real_escape_string($this->data['Media']['id']),
        ),
        'Subject' => array(
            'className' => 'Subject',
            'joinTable' => 'media_subjects',
            'foreignKey' => 'media_id',
            'associationForeignKey' => 'subject_id',
            'unique' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'finderQuery' => '',
            'deleteQuery' => '',
            'insertQuery' => ''
        )
    );

    function beforeSave() {
        if (!empty($this->data['Media']['file']['name'])) {
           if ($this->data['Media']['file']['name'] = $this->__uploadFile($this->data['Media']['file'])) {
               $this->data['Media']['filepath'] = $this->data['Media']['file']['name'];
               $this->data['Media']['filesize'] = $this->data['Media']['file']['size'];
               $this->data['Media']['file_extension'] = end(explode(".", $this->data['Media']['file']['name']));
           } else {
               return false;
           }
        } 
        return true;
    }
    
    function beforeDelete() {
       $media = $this->read(null, $this->id);
       return $this->__deleteFile($media['Media']['filepath']);
    }
}
?>

Acties:
  • 0 Henk 'm!

  • van.der.schulting
  • Registratie: Juli 2002
  • Laatst online: 09-08-2024
stef-o schreef op woensdag 22 juli 2009 @ 14:08:
in de var declaratie van een class kun je geen variabelen gebruiken als inhoud!

het antwoord van manueltje22 is the way to go!
Damn OK, thanks -> got it

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 19-09 08:51

Janoz

Moderator Devschuur®

!litemod

stef-o schreef op woensdag 22 juli 2009 @ 14:08:
in de var declaratie van een class kun je geen variabelen gebruiken als inhoud!

het antwoord van manueltje22 is the way to go!
Tuurlijk kan dat wel, maar het probleem hier is dat de waarde van die variabelen genomen wordt op het moment dat de variabele gedeclareerd wordt, en niet op het moment dat deze gebruikt wordt.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 01:20

MueR

Admin Tweakers Discord

is niet lief

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// PHP 4 stijl:
class Foo {
  var $bla;
  function bar () {
    print $this->bla;
  }
  function setBla($bla) {
    $this->bla = $bla;
  }
}
// PHP 5 stijl
class Foo {
  public $bla;
  public function bar() {
    print $this->bla;
  }
  public function setBla(string $bla) {
    $this->bla = $bla;
  }
}

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

Verwijderd

Kan je in PHP5 in een methode de datatype als argument vast stellen? :? Nog nooit gezien.

[ Voor 5% gewijzigd door Verwijderd op 22-07-2009 16:27 ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Met scalar types kan dat nog niet. Wel array of de naam van een klasse. Scalar types als string kan pas in een volgende grotere release.

[ Voor 7% gewijzigd door Voutloos op 22-07-2009 16:30 ]

{signature}


Acties:
  • 0 Henk 'm!

  • sariel
  • Registratie: Mei 2004
  • Laatst online: 22-05-2024
Tsja, even bij regel 54 kijken en ik zal het volgende:
PHP:
1
2
            nsertQuery' => "REPLACE INTO 'courses_media' (course_id, media_id) 
            VALUES('" . mysql_real_escape_string($this->data['Media']['id']),

ik mis een 'i bij je nsertQuery.


* sariel snapt niet waarom er wordt gemiept over classes en dergelijke....de aangegeven foutmelding en code waren toch redelijk duidelijk....

[ Voor 22% gewijzigd door sariel op 22-07-2009 16:32 ]

Copy.com


Acties:
  • 0 Henk 'm!

  • steffex
  • Registratie: Augustus 2003
  • Laatst online: 12-08 00:24
Ik zie dat je cakephp gebruikt... de insertQuery kun je ook bij gebruik aangeven in je controller door gewoon "$this->Media->insertQuery =" te gebruiken!

daarnaast zit je code vol onnodige declaraties.
Gebruik de gemakken van CakePHP, probeer zo veel mogelijk automagisch te laten doen! denk aan bijvoorbeeld foreign keys en HABTM tabellen. Als het goed opzet, hoef je deze niet eens in te geven!

[ Voor 44% gewijzigd door steffex op 22-07-2009 17:22 ]

Pagina: 1