[PHP-DOC] missing aliases functions

2001-03-14 Thread Damien Seguy

Hi,

This might a question for those of you who are on this list
since a year or so...

According to Zend's site (http://www.zend.com/phpfunc/nodoku_alias.php),
there is a bunch of undocumented functions which are only aliases.

Docs says that, for instance, mysql() is still available for downward
compatibility, but there is no entry for mysql() function.

Is this done on any purpose?
I suggest adding those functions, in order to give entry on the manual, and
explicitely write those functions are obsolets.

If this sounds fine to you, I'll do it.

Best regards,
Damien Seguy.

Here is a list of function I'm talking about.

mysql->mysql_db_query
mysql_createdb->mysql_create_db
mysql_dbname->mysql_result
mysql_dropdb->mysql_drop_db
mysql_fieldflags->mysql_field_flags
mysql_fieldlen->mysql_field_len
mysql_fieldname->mysql_field_name
mysql_fieldtable->mysql_field_table
mysql_fieldtype->mysql_field_type
mysql_freeresult->mysql_free_result
mysql_listdbs->mysql_list_dbs
mysql_listfields->mysql_list_fields
mysql_listtables->mysql_list_tables
mysql_numfields->mysql_num_fields
mysql_numrows->mysql_num_rows
mysql_selectdb->mysql_select_db
pg_clientencoding->pg_client_encoding
pg_setclientencoding->pg_set_client_encoding
magic_quotes_runtime->set_magic_quotes_runtime




Re: [PHP-DOC] missing aliases functions

2001-03-14 Thread Egon Schmid (@work)

Damien Seguy wrote:

> This might a question for those of you who are on this list
> since a year or so...
> 
> According to Zend's site (http://www.zend.com/phpfunc/nodoku_alias.php),
> there is a bunch of undocumented functions which are only aliases.
> 
> Docs says that, for instance, mysql() is still available for downward
> compatibility, but there is no entry for mysql() function.
> 
> Is this done on any purpose?
> I suggest adding those functions, in order to give entry on the manual, and
> explicitely write those functions are obsolets.
> 
> If this sounds fine to you, I'll do it.

Don't document aliases. All MySQL functions have since years a correct
name and the aliases could be dropped in the near future. So there is no
need to document it.

-Egon

> Here is a list of function I'm talking about.
> 
> mysql->mysql_db_query
> mysql_createdb->mysql_create_db
> mysql_dbname->mysql_result
> mysql_dropdb->mysql_drop_db
> mysql_fieldflags->mysql_field_flags
> mysql_fieldlen->mysql_field_len
> mysql_fieldname->mysql_field_name
> mysql_fieldtable->mysql_field_table
> mysql_fieldtype->mysql_field_type
> mysql_freeresult->mysql_free_result
> mysql_listdbs->mysql_list_dbs
> mysql_listfields->mysql_list_fields
> mysql_listtables->mysql_list_tables
> mysql_numfields->mysql_num_fields
> mysql_numrows->mysql_num_rows
> mysql_selectdb->mysql_select_db
> pg_clientencoding->pg_client_encoding
> pg_setclientencoding->pg_set_client_encoding
> magic_quotes_runtime->set_magic_quotes_runtime

-- 
SIX Offene Systeme GmbH   ·Stuttgart  -  Berlin 
Sielminger Straße 63   ·D-70771 Leinfelden-Echterdingen
Fon +49 711 9909164 · Fax +49 711 9909199 http://www.six.de
Besuchen Sie uns auf der CeBIT 2001,  Halle 6,  Stand F62/4



[PHP-DOC] cvs: phpdoc /fr/functions dba.xml dbase.xml dir.xml fdf.xml ftp.xml yaz.xml zlib.xml

2001-03-14 Thread Damien Seguy

damsWed Mar 14 02:17:25 2001 EDT

  Modified files:  
/phpdoc/fr/functionsdbase.xml dir.xml fdf.xml ftp.xml yaz.xml 
zlib.xml dba.xml 
  Log:
  Prepared files for reserved.xml
  

Index: phpdoc/fr/functions/dbase.xml
diff -u phpdoc/fr/functions/dbase.xml:1.3 phpdoc/fr/functions/dbase.xml:1.4
--- phpdoc/fr/functions/dbase.xml:1.3   Wed Mar  7 10:08:43 2001
+++ phpdoc/fr/functions/dbase.xml   Wed Mar 14 02:17:25 2001
@@ -162,7 +162,7 @@
 Description
 
  bool dbase_close
- int dbase_identifier
+ resource dbase_identifier
 
 
  dbase_close ferme la base associée à
@@ -179,7 +179,7 @@
 Description
 
  bool dbase_pack
- int dbase_identifier
+ resource dbase_identifier
 
 
  dbase_pack compacte la base de données
@@ -198,7 +198,7 @@
 Description
 
  bool dbase_add_record
- int dbase_identifier
+ resource dbase_identifier
  array record
 
 
@@ -219,7 +219,7 @@
 Description
 
  bool dbase_replace_record
- int dbase_identifier
+ resource dbase_identifier
  array record
  int dbase_record_number
 
@@ -246,7 +246,7 @@
 Description
 
  bool dbase_delete_record
- int dbase_identifier
+ resource dbase_identifier
  int record
 
 
@@ -266,7 +266,7 @@
 Description
 
  array dbase_get_record
- int dbase_identifier
+ resource dbase_identifier
  int record
 
 
@@ -295,7 +295,7 @@
  array
   dbase_get_record_with_names
  
- int dbase_identifier
+ resource dbase_identifier
  int record
 
 
@@ -323,7 +323,7 @@
 Description
 
  int dbase_numfields
- int dbase_identifier
+ resource dbase_identifier
 
 
  dbase_numfields retourne le nombre de champs (colonnes)
@@ -357,7 +357,7 @@
 Description
 
  int dbase_numrecords
- int dbase_identifier
+ resource dbase_identifier
 
 
  dbase_numrecords retourne le nombre d'enregistrements
Index: phpdoc/fr/functions/dir.xml
diff -u phpdoc/fr/functions/dir.xml:1.6 phpdoc/fr/functions/dir.xml:1.7
--- phpdoc/fr/functions/dir.xml:1.6 Mon Feb 26 03:10:50 2001
+++ phpdoc/fr/functions/dir.xml Wed Mar 14 02:17:25 2001
@@ -104,7 +104,7 @@
 
  
   void closedir
-  int dir_handle
+  resource dir_handle
  
 
 
@@ -124,7 +124,7 @@
 
  
   string getcwd
-  
+  void
  
 
 
@@ -189,13 +189,13 @@
 
  
   string readdir
-  int dir_handle
+  resource dir_handle
  
 
 
   readdir retourne le nom du fichier suivant dans
-  le dossier identifié par dir_handle. Les noms sont
-  retournés dans n'importe quel ordre.
+  le dossier identifié par dir_handle.
+  Les noms sont retournés dans n'importe quel ordre.
  
   Liste tous les fichiers du dossier courant
   
@@ -216,7 +216,7 @@
  "..".  Si vous ne les voulez pas, supprimez les simplement :
  
   
-   Liste tous les fichiers du dossier courant, sauf . et ..
+   Liste tous les fichiers du dossier courant, sauf "." et ".."
   
   
 

[PHP-DOC] cvs: phpdoc /fr/functions dir.xml yaz.xml zlib.xml

2001-03-14 Thread Damien Seguy

damsWed Mar 14 02:20:39 2001 EDT

  Modified files:  
/phpdoc/fr/functionsdir.xml yaz.xml zlib.xml 
  Log:
  Prepared files for reserved.xml (removed illegal chars)
  
Index: phpdoc/fr/functions/dir.xml
diff -u phpdoc/fr/functions/dir.xml:1.7 phpdoc/fr/functions/dir.xml:1.8
--- phpdoc/fr/functions/dir.xml:1.7 Wed Mar 14 02:17:25 2001
+++ phpdoc/fr/functions/dir.xml Wed Mar 14 02:20:39 2001
@@ -248,7 +248,7 @@
 
 
  rewinddir retourne à la première
- entrée du dossier identifié par dir_handle :
+ entrée du dossier identifié par dir_handle :
  le prochain fichier lu sera le premier.
 

Index: phpdoc/fr/functions/yaz.xml
diff -u phpdoc/fr/functions/yaz.xml:1.13 phpdoc/fr/functions/yaz.xml:1.14
--- phpdoc/fr/functions/yaz.xml:1.13Wed Mar 14 02:17:25 2001
+++ phpdoc/fr/functions/yaz.xml Wed Mar 14 02:20:39 2001
@@ -177,7 +177,7 @@
 
  
  yaz_connect retourne un identifiant positif en cas
- de succès, et FALSE sinon.
+ de succès, et FALSE sinon.
 

  yaz_connect prépare une connexion
@@ -298,7 +298,7 @@

 yaz_database
 
- Spécifie la base d'une session
+ Spécifie la base d'une session
 


@@ -311,20 +311,20 @@
  
 
 
- yaz_database spécifie 
+ yaz_database spécifie
  databases, la ou les
- bases utilisées lors des recherches, lectures, etc,
- en remplacant celles spécifiées lors de la fonction
+ bases utilisées lors des recherches, lectures, etc,
+ en remplacant celles spécifiées lors de la fonction
  yaz_connect. Pour indiquer plusieurs
- bases de données, séparez les noms par des +.
+ bases de données, séparez les noms par des +.
 
 
- yaz_database vous permet d'utiliser différents
+ yaz_database vous permet d'utiliser différents
  jeux de bases durant une session.
 
 
  yaz_database retourne TRUE
- en cas de succès, ou FALSE en cas d'erreur.
+ en cas de succès, ou FALSE en cas d'erreur.
 

   
Index: phpdoc/fr/functions/zlib.xml
diff -u phpdoc/fr/functions/zlib.xml:1.8 phpdoc/fr/functions/zlib.xml:1.9
--- phpdoc/fr/functions/zlib.xml:1.8Wed Mar 14 02:17:25 2001
+++ phpdoc/fr/functions/zlib.xmlWed Mar 14 02:20:39 2001
@@ -116,8 +116,8 @@
  int 
use_include_path
 
 
- gzfile est identique à 
- readgzfile, mais 
+ gzfile est identique à
+ readgzfile, mais
  gzfile retourne un tableau.

 
@@ -142,10 +142,10 @@
  resource zp
 
 
- gzgetc retourne une chaîne 
- décompressée, qui contient un caractère 
- unique, lu depuis le fichier référencé 
- par le pointeur zp. 
+ gzgetc retourne une chaîne
+ décompressée, qui contient un caractère
+ unique, lu depuis le fichier référencé
+ par le pointeur zp.
  gzgetc retourne FALSE à
  la fin du fichier (voir gzeof).
 
@@ -305,9 +305,9 @@
  resource zp
 
 
- gzpassthru lit toutes les informations 
+ gzpassthru lit toutes les informations
  d'un fichier compressé jusqu'à la fin du fichier
- zp, et écrit le résultat 
+ zp, et écrit le résultat
  décompressé dans la sortie standard.


@@ -377,10 +377,10 @@
  
 
 
- Voir aussi 
- gzwrite, 
+ Voir aussi
+ gzwrite,
  gzopen,
- gzgets, 
+ gzgets,
  gzgetss,
  gzfile et
  gzpassthru.
@@ -477,7 +477,7 @@
  gzopen.
 
 
- Voir aussi 
+ Voir aussi
  gzopen,
  gzseek et
  gzrewind.
@@ -514,8 +514,8 @@
  la chaîne string.
 
 
- Voir aussi 
- gzread, 
+ Voir aussi
+ gzread,
  gzopen et
  gzputs.
 
@@ -558,9 +558,9 @@
   include_path.
 
 
- Voir aussi 
+ Voir aussi
  gzpassthru,
- gzfile et 
+ gzfile et
  gzopen.
 

@@ -767,7 +767,7 @@
  (RFC 1952).
 
 
- Voir aussi 
+ Voir aussi
  gzcompress,
  gzuncompress,
  gzdeflate et





Re: [PHP-DOC] missing aliases functions

2001-03-14 Thread Daniel Beckham

Actually, I think it might be better to completely remove all references to
aliases.  People don't need to use them and they are only there to keep old
code from breaking.  The less people know about them, the better really.

If we still need some sort of compatibility list, we could always create an
alias/compatibility appendix and list all alias functions there.  That way,
they would at least be accessible to people who are reading or converting
very old code.

Daniel

- Original Message -
From: "Damien Seguy" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Wednesday, March 14, 2001 2:39 AM
Subject: [PHP-DOC] missing aliases functions


> Hi,
>
> This might a question for those of you who are on this list
> since a year or so...
>
> According to Zend's site (http://www.zend.com/phpfunc/nodoku_alias.php),
> there is a bunch of undocumented functions which are only aliases.
>
> Docs says that, for instance, mysql() is still available for downward
> compatibility, but there is no entry for mysql() function.
>
> Is this done on any purpose?
> I suggest adding those functions, in order to give entry on the manual,
and
> explicitely write those functions are obsolets.
>
> If this sounds fine to you, I'll do it.
>
> Best regards,
> Damien Seguy.
>
> Here is a list of function I'm talking about.
>
> mysql->mysql_db_query
> mysql_createdb->mysql_create_db
> mysql_dbname->mysql_result
> mysql_dropdb->mysql_drop_db
> mysql_fieldflags->mysql_field_flags
> mysql_fieldlen->mysql_field_len
> mysql_fieldname->mysql_field_name
> mysql_fieldtable->mysql_field_table
> mysql_fieldtype->mysql_field_type
> mysql_freeresult->mysql_free_result
> mysql_listdbs->mysql_list_dbs
> mysql_listfields->mysql_list_fields
> mysql_listtables->mysql_list_tables
> mysql_numfields->mysql_num_fields
> mysql_numrows->mysql_num_rows
> mysql_selectdb->mysql_select_db
> pg_clientencoding->pg_client_encoding
> pg_setclientencoding->pg_set_client_encoding
> magic_quotes_runtime->set_magic_quotes_runtime
>
>
>




Re: [PHP-DOC] missing aliases functions

2001-03-14 Thread Damien Seguy

on 14/03/01 16:11,

>From Egon : 
> Don't document aliases. All MySQL functions have since years a correct
> name and the aliases could be dropped in the near future. So there is no
> need to document it.
I felt there were some reason, and I'm glad I asked :-)

>From Daniel : 
> If we still need some sort of compatibility list, we could always create an
> alias/compatibility appendix and list all alias functions there.  That way,
> they would at least be accessible to people who are reading or converting
> very old code.
This seems reasonnable to me. We can call it "obsolete function", or "near
extinction aliases", to insist on their nearing death. This appendix may
give a chance to redirect people on modern entries.

Damien Seguy




Re: [PHP-DOC] missing aliases functions

2001-03-14 Thread Daniel Beckham

Sounds good to mean, what does everyone else think about this?

- Original Message -
From: "Damien Seguy" <[EMAIL PROTECTED]>
To: "phpdoc" <[EMAIL PROTECTED]>
Sent: Wednesday, March 14, 2001 10:10 AM
Subject: Re: [PHP-DOC] missing aliases functions


> >From Daniel :
> > If we still need some sort of compatibility list, we could always create
an
> > alias/compatibility appendix and list all alias functions there.  That
way,
> > they would at least be accessible to people who are reading or
converting
> > very old code.
> This seems reasonnable to me. We can call it "obsolete function", or "near
> extinction aliases", to insist on their nearing death. This appendix may
> give a chance to redirect people on modern entries.







Re: [PHP-DOC] missing aliases functions

2001-03-14 Thread Hojtsy Gabor

Correct... :) I like it :)

> Sounds good to mean, what does everyone else think about this?
>
> > > If we still need some sort of compatibility list, we could always
create
> an
> > > alias/compatibility appendix and list all alias functions there.  That
> way,
> > > they would at least be accessible to people who are reading or
> converting
> > > very old code.
> > This seems reasonnable to me. We can call it "obsolete function", or
"near
> > extinction aliases", to insist on their nearing death. This appendix may
> > give a chance to redirect people on modern entries.

Goba
... . . .  .  .
Editor of the Hungarian PHP manual, Admin of the Hungarian PHP mirror




Re: [PHP-DOC] missing aliases functions

2001-03-14 Thread Jesus M. Castagnetto

And then, we have functions that are alias but we
still want to document, e.g. is_real() and is_float()
are aliases of is_double(), fputs() alias of fwrite(),
gzputs() alias of gzwrite(), etc.

These we want to keep, I agree that the ones that have
been renamed for consitency should not be kept. 

--- Daniel Beckham <[EMAIL PROTECTED]> wrote:
> Actually, I think it might be better to completely
> remove all references to
> aliases.  People don't need to use them and they are
> only there to keep old
> code from breaking.  The less people know about
> them, the better really.
> 
> If we still need some sort of compatibility list, we
> could always create an
> alias/compatibility appendix and list all alias
> functions there.  That way,
> they would at least be accessible to people who are
> reading or converting
> very old code.
> 
> Daniel
> 
> - Original Message -
> From: "Damien Seguy" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Wednesday, March 14, 2001 2:39 AM
> Subject: [PHP-DOC] missing aliases functions
> 
> 
> > Hi,
> >
> > This might a question for those of you who are on
> this list
> > since a year or so...
> >
> > According to Zend's site
> (http://www.zend.com/phpfunc/nodoku_alias.php),
> > there is a bunch of undocumented functions which
> are only aliases.
> >
> > Docs says that, for instance, mysql() is still
> available for downward
> > compatibility, but there is no entry for mysql()
> function.
> >
> > Is this done on any purpose?
> > I suggest adding those functions, in order to give
> entry on the manual,
> and
> > explicitely write those functions are obsolets.
> >
> > If this sounds fine to you, I'll do it.
> >
> > Best regards,
> > Damien Seguy.
> >
> > Here is a list of function I'm talking about.
> >
> > mysql->mysql_db_query
> > mysql_createdb->mysql_create_db
> > mysql_dbname->mysql_result
> > mysql_dropdb->mysql_drop_db
> > mysql_fieldflags->mysql_field_flags
> > mysql_fieldlen->mysql_field_len
> > mysql_fieldname->mysql_field_name
> > mysql_fieldtable->mysql_field_table
> > mysql_fieldtype->mysql_field_type
> > mysql_freeresult->mysql_free_result
> > mysql_listdbs->mysql_list_dbs
> > mysql_listfields->mysql_list_fields
> > mysql_listtables->mysql_list_tables
> > mysql_numfields->mysql_num_fields
> > mysql_numrows->mysql_num_rows
> > mysql_selectdb->mysql_select_db
> > pg_clientencoding->pg_client_encoding
> > pg_setclientencoding->   
> pg_set_client_encoding
> > magic_quotes_runtime->   
> set_magic_quotes_runtime
> >
> >
> >
> 


=
--- Jesus M. Castagnetto <[EMAIL PROTECTED]>

__
Do You Yahoo!?
Yahoo! Auctions - Buy the things you want at great prices.
http://auctions.yahoo.com/



[PHP-DOC] cvs: phpdoc /ja language-defs.ent

2001-03-14 Thread Rui Hirokawa

hirokawaWed Mar 14 14:12:29 2001 EDT

  Modified files:  
/phpdoc/ja  language-defs.ent 
  Log:
  modified 'edited by' tag.
  
Index: phpdoc/ja/language-defs.ent
diff -u phpdoc/ja/language-defs.ent:1.4 phpdoc/ja/language-defs.ent:1.5
--- phpdoc/ja/language-defs.ent:1.4 Fri Mar  9 07:33:03 2001
+++ phpdoc/ja/language-defs.ent Wed Mar 14 14:12:29 2001
@@ -5,6 +5,7 @@
 
 
 
+
 
 
 





[PHP-DOC] cvs: phpdoc /fr language-defs.ent

2001-03-14 Thread Egon Schmid

eschmid Wed Mar 14 14:51:42 2001 EDT

  Modified files:  
/phpdoc/fr  language-defs.ent 
  Log:
  PEAR was missing.
  
Index: phpdoc/fr/language-defs.ent
diff -u phpdoc/fr/language-defs.ent:1.1 phpdoc/fr/language-defs.ent:1.2
--- phpdoc/fr/language-defs.ent:1.1 Fri Dec 15 00:58:53 2000
+++ phpdoc/fr/language-defs.ent Wed Mar 14 14:51:42 2001
@@ -5,6 +5,6 @@
 
 
 
-
+
 
 





Re: [PHP-DOC] missing aliases functions

2001-03-14 Thread Ron Chmara

Damien Seguy wrote:
> According to Zend's site (http://www.zend.com/phpfunc/nodoku_alias.php),
> there is a bunch of undocumented functions which are only aliases.
> Docs says that, for instance, mysql() is still available for downward
> compatibility, but there is no entry for mysql() function.
> Is this done on any purpose?

Yes. Per discussions in Nov/Dec., some guidlelines were established.

>From /phpdoc/README:
> 1. Only major functions should be documented, functions which are
>deprecated variants may be mentioned, but should not be
>documented as separate functions. They instead should be
>referenced in the parent function as an alias. Functions which
>have completely different names, however, should be documented as
>separate entries, for ease of reference.
>
>Examples:
>mysql_db_name and mysql_dbname will be documented as the same
>function, with the latter being listed as an alias of the 
>former.
>
>show_source and highlight_file will be documented as two
>different functions (one as an alias), as the names are
>completely different, and one name is not likely to be found
>if looking for the name of the other.

and:

> 3. Functions which are kept only for backwards compatibility should
>be listed under their current parent names, and not documented as
>separate functions. Backwards compatible functions and
>documentation for them should be maintained as long as the code
>can be reasonably kept as part of the PHP codebase.


Also, from /php4/CODING_STANDARDS:

> Aliases & Legacy Documentation
> ---
> You may also have some deprecated aliases with close to duplicate
> names, for example, somedb_select_result and somedb_selectresult. For
> documentation puposes, these will only be documented by the most
> current name, with the aliases listed in the documentation for
> the parent function. For ease of reference, user-functions with
> completely different names, that alias to the same function (such as
> highlight_file and show_source), will be separately documented. The
> proto should still be included, describing which function is aliased.
> 
> Backwards compatible functions and names should be maintained as long
> as the code can be reasonably be kept as part of the codebase. See
> /phpdoc/README for me information on documentation.

The reason for the above was mostly about giving the users a "right"
name for a function, without damaging our legacy codebase, or having
to keep many documentation pages in sync. If the function legacy name is
listed in the current name page, they can still find it via the
"search" interface.

Besides, we're far enough behind on functiuons with _no_ ducumentation,
let alone aliases, that we need to focus any new documentation efforts
on getting those names taken care of.

-Bop

-- 
--2D426F70|759328624|00101101011001100111
Personal:  [EMAIL PROTECTED], 520-326-6109, http://www.opus1.com/ron/
Work: [EMAIL PROTECTED], 520-546-8993, http://www.pnsinc.com/
The opinions expressed in this email are not necessarily those of myself,
my employers, or any of the other little voices in my head.



[PHP-DOC] cvs: phpdoc /en/functions bzip2.xml

2001-03-14 Thread Sterling Hughes

sterlingWed Mar 14 23:10:03 2001 EDT

  Modified files:  
/phpdoc/en/functionsbzip2.xml 
  Log:
  Added some  tags and expand some of the code examples.
  
  
  
Index: phpdoc/en/functions/bzip2.xml
diff -u phpdoc/en/functions/bzip2.xml:1.3 phpdoc/en/functions/bzip2.xml:1.4
--- phpdoc/en/functions/bzip2.xml:1.3   Mon Feb 19 06:33:56 2001
+++ phpdoc/en/functions/bzip2.xml   Wed Mar 14 23:10:03 2001
@@ -127,9 +127,11 @@
 
  
   bzcompress Example
-  
+  
   
  
 
@@ -169,8 +171,19 @@
 
  
   bzdecompress
-  
-$str = $bzdecompress($bzstr);
+  
   
  
 
@@ -226,11 +239,12 @@
 
  
   bzerror Example
-  
+  
   
  
 
@@ -319,8 +333,15 @@
 
  
   bzopen Example
-  
+  
   
  
 
@@ -360,10 +381,11 @@
 
  
   bzread Example
-  
+  
   
  
 
@@ -402,10 +424,12 @@
 
  
   bzwrite Example
-  
+  

  
 





Re: [PHP-DOC] missing aliases functions

2001-03-14 Thread Hojtsy Gabor

> Besides, we're far enough behind on functiuons with _no_ ducumentation,
> let alone aliases, that we need to focus any new documentation efforts
> on getting those names taken care of.

I think it wont hurt to do a list of decepreated aliasaes
as an appendix. So people can find the right function...

Goba
... . . .  .  .
Editor of the Hungarian PHP manual, Admin of the Hungarian PHP mirror