Re: Avoid object twice

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Yui Hiroaki wrote:
The code is blelow;
-----------------b.php----------------
<?php
function __autoload($class_name) {
  include_once $class_name . '.php';
}


$objref=new My("Good");
$objref->buff();
?>
-----------------------------------

----------My.php--------------
<?php
$obj=new My("Hello");
$obj->buff();


Class My{
       private $word;
       function __construct($getword){
       $this->word=$getword;
       }
       public function buff(){
       echo $this->word."<br />";
       }
}
?>
--------------------------------------

on website, first it execute My.php , then execute b.php

So it will show blelow;
Hello(when excute My.php)


Hello(when excute from b.php)
Good(when excute from b.php)



I do not need "Hello" twice


I would get

Hello(when excute My.php)
Good(when excute from b.php)



Please do help me!

Regards,
Yui

















2008/6/3 Thijs Lensselink <dev@xxxxxxxx>:
Quoting Yui Hiroaki <hiroakiyui@xxxxxxxxx>:

Please look at my.php

my.php load
$obj=new My("Hello");
$obj->buff();

so, if a.php load, it absolutely got "hello" in load b.php

Regards,
Yui

2008/6/3 Thijs Lensselink <dev@xxxxxxxx>:
Quoting Yui Hiroaki <hiroakiyui@xxxxxxxxx>:

Thank you for a good suggest!

Somehow, I have to execute my.php also.
This program have to run.
1)My.php
2)b.php

My.php show "Hello" -> it is OK,
b.php shows
 "Hello"
"Good"

it is NOT good. I need to get only "Good"


Please give me a suggestion.

Regards,
Yui
2008/6/3 James Dempster <letssurf@xxxxxxxxx>:
I suggest you don't put code other than class structures in class
files.
Also don't execute My.php just execute b.php which though __autoload
includes My.php.

-----------------b.php----------------
<?php
function __autoload($class_name) {
 include_once $class_name . '.php';
}

$obj=new My("Hello");
$obj->buff();

$objref=new My("Good");
$objref->buff();

-----------------------------------

----------My.php--------------
<?php

Class My{
     private $word;
     function __construct($getword){
     $this->word=$getword;
     }
     public function buff(){
     echo $this->word."<br />";
     }
}


/James Dempster

On Tue, Jun 3, 2008 at 9:17 AM, Yui Hiroaki <hiroakiyui@xxxxxxxxx>
wrote:
HI!

I had mistake in code in php.

When I excute My.php, it say "Hello"
When I excute b.php, it say
Hello
Good

I would like to execute b.php and show
only "Good"

If you know it ,please teach me!

Here is code below;

-----------------b.php----------------
<?php
function __autoload($class_name) {
 include_once $class_name . '.php';
}


$objref=new My("Good");
$objref->buff();
?>
-----------------------------------

----------My.php--------------
<?php
$obj=new My("Hello");
$obj->buff();


Class My{
     private $word;
     function __construct($getword){
     $this->word=$getword;
     }
     public function buff(){
     echo $this->word."<br />";
     }
}
?>
--------------------------------------
Regards,
Yui


2008/6/3 James Dempster <letssurf@xxxxxxxxx>:
I don't see how it's possible for you to get "Hello" after "Good",
when
the
file that cause's "Hello" is required to do "Good"

/James

On Mon, Jun 2, 2008 at 2:00 PM, Yui Hiroaki <hiroakiyui@xxxxxxxxx>
wrote:
Please take a look at code.

--------a.php--------

$obj=new my("Hello");
$obj->buff();


Class my{

private $word;
function __construct($getword){
      $this->word=$getword;
}
public function buff(){
    echo $this->word."<br />";
}
--------------------------------------


-----b.php-----------------------

function __autoload($class_name) {
   include_once $class_name . '.php';
}


$objref=new my("Good");
$objref->buff();
--------------------------------------------



I get an Echo;

Good
Hello
Hello

I do not need to get Hello twice.

When I b.php , $obj=new my("Hello") is loaded.


Do you have any adia to avoid load $obj in a.php twice?

Regards,
Yui

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



If you only want to see "Good" Then don't run it twice.
Take James's suggestion and try it again:

-----------------b.php----------------
<?php
function __autoload($class_name) {
 include_once $class_name . '.php';
}

$objref=new My("Good");
$objref->buff();

-----------------------------------

----------My.php--------------
<?php

Class My{
      private $word;
      function __construct($getword){
      $this->word=$getword;
      }
      public function buff(){
      echo $this->word."<br />";
      }
}


I don't think i understand you fully. Or you're trying to make it to
complicated.

You have a class in "My.php" :

Class My{
   private $word;

   function __construct($getword){
       $this->word=$getword;
   }

   public function buff(){
       echo $this->word."<br />";
   }
}

And a script that creates an instance of My "b.php" :

function __autoload($class_name) {
 include_once $class_name . '.php';
}

$obj=new My("Hello");
$obj->buff();

$objref=new My("Good");
$objref->buff();

The output will be "Hello<br/>Good<br/>". because you call it two times. So
if you only want to see "Good". Then you change "b.php" to look like this:

function __autoload($class_name) {
 include_once $class_name . '.php';
}

$objref=new My("Good");
$objref->buff();

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php




You are confusing the terms execute, with include.

If you are including a script/file and you only want it included once, then you need to use the *_once constructs. I don't call them functions because they are not functions.

include 'filename';
include_once 'filename';
require 'filename';
require_once 'filename';

if you use the *_once calls, your script will only ever be included one time.

If you mix them, then you will have problems.

your class scripts should be setup to where there is only one class per file and that nothing is "executed" from that file. It should only be included. Then the file(s) that include your class should do the work of initializing and using the class.



--
Jim Lucas

   "Some men are born to greatness, some achieve greatness,
       and some have greatness thrust upon them."

Twelfth Night, Act II, Scene V
    by William Shakespeare


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux